Message ID | 20220119001717.2503111-3-kieran.bingham@ideasonboard.com |
---|---|
State | Superseded |
Delegated to: | Kieran Bingham |
Headers | show |
Series |
|
Related | show |
Hi Kieran, On Wed, Jan 19, 2022 at 12:17:17AM +0000, Kieran Bingham wrote: > Objects shouldn't be connected to the same signal more than once. Doing > so indicates a bug in the code, and can be highlighted in debug builds > with an assert that performs a lookup on the signals_ list. > > Remove the support in the test framework which uses multiple Signal > connections on the same object. > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> This seems better than an arbitrary limit Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Thanks j > --- > src/libcamera/base/object.cpp | 6 ++++++ > test/signal.cpp | 8 ++------ > 2 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/src/libcamera/base/object.cpp b/src/libcamera/base/object.cpp > index 3f28768e48f8..7311b1d5a3a1 100644 > --- a/src/libcamera/base/object.cpp > +++ b/src/libcamera/base/object.cpp > @@ -284,6 +284,12 @@ void Object::notifyThreadMove() > > void Object::connect(SignalBase *signal) > { > + /* > + * Connecting the same signal to an object multiple times is not > + * supported. > + */ > + ASSERT(signals_.end() == std::find(signals_.begin(), signals_.end(), signal)); > + > signals_.push_back(signal); > } > > diff --git a/test/signal.cpp b/test/signal.cpp > index fcf2def18df4..a1effaab0346 100644 > --- a/test/signal.cpp > +++ b/test/signal.cpp > @@ -212,14 +212,12 @@ protected: > /* ----------------- Signal -> Object tests ----------------- */ > > /* > - * Test automatic disconnection on object deletion. Connect the > - * slot twice to ensure all instances are disconnected. > + * Test automatic disconnection on object deletion. > */ > signalVoid_.disconnect(); > > SlotObject *slotObject = new SlotObject(); > signalVoid_.connect(slotObject, &SlotObject::slot); > - signalVoid_.connect(slotObject, &SlotObject::slot); > delete slotObject; > valueStatic_ = 0; > signalVoid_.emit(); > @@ -298,14 +296,12 @@ protected: > /* --------- Signal -> Object (multiple inheritance) -------- */ > > /* > - * Test automatic disconnection on object deletion. Connect the > - * slot twice to ensure all instances are disconnected. > + * Test automatic disconnection on object deletion. > */ > signalVoid_.disconnect(); > > SlotMulti *slotMulti = new SlotMulti(); > signalVoid_.connect(slotMulti, &SlotMulti::slot); > - signalVoid_.connect(slotMulti, &SlotMulti::slot); > delete slotMulti; > valueStatic_ = 0; > signalVoid_.emit(); > -- > 2.32.0 >
diff --git a/src/libcamera/base/object.cpp b/src/libcamera/base/object.cpp index 3f28768e48f8..7311b1d5a3a1 100644 --- a/src/libcamera/base/object.cpp +++ b/src/libcamera/base/object.cpp @@ -284,6 +284,12 @@ void Object::notifyThreadMove() void Object::connect(SignalBase *signal) { + /* + * Connecting the same signal to an object multiple times is not + * supported. + */ + ASSERT(signals_.end() == std::find(signals_.begin(), signals_.end(), signal)); + signals_.push_back(signal); } diff --git a/test/signal.cpp b/test/signal.cpp index fcf2def18df4..a1effaab0346 100644 --- a/test/signal.cpp +++ b/test/signal.cpp @@ -212,14 +212,12 @@ protected: /* ----------------- Signal -> Object tests ----------------- */ /* - * Test automatic disconnection on object deletion. Connect the - * slot twice to ensure all instances are disconnected. + * Test automatic disconnection on object deletion. */ signalVoid_.disconnect(); SlotObject *slotObject = new SlotObject(); signalVoid_.connect(slotObject, &SlotObject::slot); - signalVoid_.connect(slotObject, &SlotObject::slot); delete slotObject; valueStatic_ = 0; signalVoid_.emit(); @@ -298,14 +296,12 @@ protected: /* --------- Signal -> Object (multiple inheritance) -------- */ /* - * Test automatic disconnection on object deletion. Connect the - * slot twice to ensure all instances are disconnected. + * Test automatic disconnection on object deletion. */ signalVoid_.disconnect(); SlotMulti *slotMulti = new SlotMulti(); signalVoid_.connect(slotMulti, &SlotMulti::slot); - signalVoid_.connect(slotMulti, &SlotMulti::slot); delete slotMulti; valueStatic_ = 0; signalVoid_.emit();
Objects shouldn't be connected to the same signal more than once. Doing so indicates a bug in the code, and can be highlighted in debug builds with an assert that performs a lookup on the signals_ list. Remove the support in the test framework which uses multiple Signal connections on the same object. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> --- src/libcamera/base/object.cpp | 6 ++++++ test/signal.cpp | 8 ++------ 2 files changed, 8 insertions(+), 6 deletions(-)