[libcamera-devel] [PATCH v2 2/2] libcamera: base: object: Prevent the same signal being connected more than once
Jacopo Mondi
jacopo at jmondi.org
Wed Jan 19 09:47:01 CET 2022
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 at ideasonboard.com>
This seems better than an arbitrary limit
Reviewed-by: Jacopo Mondi <jacopo at 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
>
More information about the libcamera-devel
mailing list