summaryrefslogtreecommitdiff
path: root/include/libcamera/signal.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libcamera/signal.h')
-rw-r--r--include/libcamera/signal.h12
1 files changed, 7 insertions, 5 deletions
diff --git a/include/libcamera/signal.h b/include/libcamera/signal.h
index 3b6de30f..b8a60281 100644
--- a/include/libcamera/signal.h
+++ b/include/libcamera/signal.h
@@ -46,7 +46,9 @@ public:
~Signal()
{
for (BoundMethodBase *slot : slots_) {
- slot->disconnect(this);
+ Object *object = slot->object();
+ if (object)
+ object->disconnect(this);
delete slot;
}
}
@@ -95,11 +97,11 @@ public:
/*
* If the object matches the slot, the slot is
* guaranteed to be a member slot, so we can safely
- * cast it to BoundMemberMethod<T, Args...> and access its
- * func_ member.
+ * cast it to BoundMemberMethod<T, Args...> to match
+ * func.
*/
if (slot->match(obj) &&
- static_cast<BoundMemberMethod<T, Args...> *>(slot)->func_ == func) {
+ static_cast<BoundMemberMethod<T, Args...> *>(slot)->match(func)) {
iter = slots_.erase(iter);
delete slot;
} else {
@@ -113,7 +115,7 @@ public:
for (auto iter = slots_.begin(); iter != slots_.end(); ) {
BoundMethodArgs<Args...> *slot = *iter;
if (slot->match(nullptr) &&
- static_cast<BoundStaticMethod<Args...> *>(slot)->func_ == func) {
+ static_cast<BoundStaticMethod<Args...> *>(slot)->match(func)) {
iter = slots_.erase(iter);
delete slot;
} else {