From patchwork Wed Jan 19 00:17:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 15287 X-Patchwork-Delegate: kieran.bingham@ideasonboard.com Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 66EDAC325B for ; Wed, 19 Jan 2022 00:17:25 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9130260950; Wed, 19 Jan 2022 01:17:23 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Qt3Y9NHq"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 99FF86017D for ; Wed, 19 Jan 2022 01:17:21 +0100 (CET) Received: from Monstersaurus.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 4B463B75; Wed, 19 Jan 2022 01:17:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1642551441; bh=EVHPT3FrAt0C4bm/dxra2S9z2vdyxMw9Q93cDLHFm/w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qt3Y9NHqeWcbppydEHw3Z1Nn7ZzuT7vKnYpmkxRueYdBRpJ8ZKo4xri7YbGJ+OmZC O1FoP9zVWE3LsKi7qdfR1rdzNV6fBxNkTgpKvrxeVt6lMWUqdTli+lMcuGQPx3KrJ9 zsUmV368HtBLR1OB7HkyVGNh7Shhid0PKWcezjOg= From: Kieran Bingham To: libcamera devel Date: Wed, 19 Jan 2022 00:17:17 +0000 Message-Id: <20220119001717.2503111-3-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220119001717.2503111-1-kieran.bingham@ideasonboard.com> References: <20220119001717.2503111-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/2] libcamera: base: object: Prevent the same signal being connected more than once X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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 Reviewed-by: Jacopo Mondi --- 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();