[{"id":3539,"web_url":"https://patchwork.libcamera.org/comment/3539/","msgid":"<20200120134844.sk5ipnrfu5msbv3c@uno.localdomain>","date":"2020-01-20T13:48:44","subject":"Re: [libcamera-devel] [PATCH 08/19] test: signal: Add additional\n\tdisconnection tests for Object","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Mon, Jan 20, 2020 at 02:24:26AM +0200, Laurent Pinchart wrote:\n> Add two tests that exercise the Signal::disconnect(Object *) and\n> Signal::disconnect() methods, to verify that they correctly remove the\n> signal from the connected object's list of signals. This triggers an\n> issue that was detected through manual code inspection, and is expected\n> to crash or at least generate valgrind warnings.\n>\n\nI can confirm the following is gone in the next commits\n\n==25012== Invalid read of size 8\n==25012==    at 0x112E8D: std::__cxx11::list<libcamera::BoundMethodBase*, std::allocator<libcamera::BoundMethodBase*> >::begin() (stl_list.h:942)\n==25012==    by 0x4A3253C: void libcamera::SignalBase::disconnect<libcamera::Object>(libcamera::Object*) (signal.h:25)\n==25012==    by 0x4A31A0B: libcamera::Object::~Object() (object.cpp:80)\n==25012==    by 0x11AA87: SlotObject::~SlotObject() (signal.cpp:31)\n==25012==    by 0x11AAAB: SlotObject::~SlotObject() (signal.cpp:31)\n==25012==    by 0x112536: SignalTest::run() (signal.cpp:233)\n==25012==    by 0x11B41D: Test::execute() (test.cpp:36)\n==25012==    by 0x1113E6: main (signal.cpp:317)\n==25012==  Address 0x50d3690 is 0 bytes inside a block of size 24 free'd\n==25012==    at 0x4839EAB: operator delete(void*) (vg_replace_malloc.c:586)\n==25012==    by 0x11250E: SignalTest::run() (signal.cpp:232)\n==25012==    by 0x11B41D: Test::execute() (test.cpp:36)\n==25012==    by 0x1113E6: main (signal.cpp:317)\n==25012==  Block was alloc'd at\n==25012==    at 0x4838DEF: operator new(unsigned long) (vg_replace_malloc.c:344)\n==25012==    by 0x11240D: SignalTest::run() (signal.cpp:228)\n==25012==    by 0x11B41D: Test::execute() (test.cpp:36)\n==25012==    by 0x1113E6: main (signal.cpp:317)\n\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> ---\n>  test/signal.cpp | 24 ++++++++++++++++++++++++\n>  1 file changed, 24 insertions(+)\n>\n> diff --git a/test/signal.cpp b/test/signal.cpp\n> index 0054ed5a380d..f83ceb05f091 100644\n> --- a/test/signal.cpp\n> +++ b/test/signal.cpp\n> @@ -220,6 +220,30 @@ protected:\n>  \t\tdelete dynamicSignal;\n>  \t\tdelete slotObject;\n>\n> +\t\t/*\n> +\t\t * Test that signal manual disconnection from Object removes\n> +\t\t * the signal for the object. This shall not generate any\n> +\t\t * valgrind warning.\n> +\t\t */\n> +\t\tdynamicSignal = new Signal<>();\n> +\t\tslotObject = new SlotObject();\n> +\t\tdynamicSignal->connect(slotObject, &SlotObject::slot);\n> +\t\tdynamicSignal->disconnect(slotObject);\n> +\t\tdelete dynamicSignal;\n> +\t\tdelete slotObject;\n> +\n> +\t\t/*\n> +\t\t * Test that signal manual disconnection from all slots removes\n> +\t\t * the signal for the object. This shall not generate any\n> +\t\t * valgrind warning.\n> +\t\t */\n> +\t\tdynamicSignal = new Signal<>();\n> +\t\tslotObject = new SlotObject();\n> +\t\tdynamicSignal->connect(slotObject, &SlotObject::slot);\n> +\t\tdynamicSignal->disconnect();\n> +\t\tdelete dynamicSignal;\n> +\t\tdelete slotObject;\n> +\n>  \t\t/* Exercise the Object slot code paths. */\n>  \t\tslotObject = new SlotObject();\n>  \t\tsignalVoid_.connect(slotObject, &SlotObject::slot);\n> --\n> Regards,\n>\n> Laurent Pinchart\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay10.mail.gandi.net (relay10.mail.gandi.net\n\t[217.70.178.230])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 91E1C60804\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Jan 2020 14:46:13 +0100 (CET)","from uno.localdomain (93-34-114-233.ip49.fastwebnet.it\n\t[93.34.114.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay10.mail.gandi.net (Postfix) with ESMTPSA id 276B1240008;\n\tMon, 20 Jan 2020 13:46:12 +0000 (UTC)"],"Date":"Mon, 20 Jan 2020 14:48:44 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200120134844.sk5ipnrfu5msbv3c@uno.localdomain>","References":"<20200120002437.6633-1-laurent.pinchart@ideasonboard.com>\n\t<20200120002437.6633-9-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"gwckqqwydppyoond\"","Content-Disposition":"inline","In-Reply-To":"<20200120002437.6633-9-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 08/19] test: signal: Add additional\n\tdisconnection tests for Object","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Mon, 20 Jan 2020 13:46:13 -0000"}},{"id":3569,"web_url":"https://patchwork.libcamera.org/comment/3569/","msgid":"<20200122152019.GP1124294@oden.dyn.berto.se>","date":"2020-01-22T15:20:19","subject":"Re: [libcamera-devel] [PATCH 08/19] test: signal: Add additional\n\tdisconnection tests for Object","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your test.\n\nOn 2020-01-20 02:24:26 +0200, Laurent Pinchart wrote:\n> Add two tests that exercise the Signal::disconnect(Object *) and\n> Signal::disconnect() methods, to verify that they correctly remove the\n> signal from the connected object's list of signals. This triggers an\n> issue that was detected through manual code inspection, and is expected\n> to crash or at least generate valgrind warnings.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  test/signal.cpp | 24 ++++++++++++++++++++++++\n>  1 file changed, 24 insertions(+)\n> \n> diff --git a/test/signal.cpp b/test/signal.cpp\n> index 0054ed5a380d..f83ceb05f091 100644\n> --- a/test/signal.cpp\n> +++ b/test/signal.cpp\n> @@ -220,6 +220,30 @@ protected:\n>  \t\tdelete dynamicSignal;\n>  \t\tdelete slotObject;\n>  \n> +\t\t/*\n> +\t\t * Test that signal manual disconnection from Object removes\n> +\t\t * the signal for the object. This shall not generate any\n> +\t\t * valgrind warning.\n> +\t\t */\n> +\t\tdynamicSignal = new Signal<>();\n> +\t\tslotObject = new SlotObject();\n> +\t\tdynamicSignal->connect(slotObject, &SlotObject::slot);\n> +\t\tdynamicSignal->disconnect(slotObject);\n> +\t\tdelete dynamicSignal;\n> +\t\tdelete slotObject;\n> +\n> +\t\t/*\n> +\t\t * Test that signal manual disconnection from all slots removes\n> +\t\t * the signal for the object. This shall not generate any\n> +\t\t * valgrind warning.\n> +\t\t */\n> +\t\tdynamicSignal = new Signal<>();\n> +\t\tslotObject = new SlotObject();\n> +\t\tdynamicSignal->connect(slotObject, &SlotObject::slot);\n> +\t\tdynamicSignal->disconnect();\n> +\t\tdelete dynamicSignal;\n> +\t\tdelete slotObject;\n> +\n>  \t\t/* Exercise the Object slot code paths. */\n>  \t\tslotObject = new SlotObject();\n>  \t\tsignalVoid_.connect(slotObject, &SlotObject::slot);\n> -- \n> Regards,\n> \n> Laurent Pinchart\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lf1-x141.google.com (mail-lf1-x141.google.com\n\t[IPv6:2a00:1450:4864:20::141])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0965860854\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Jan 2020 16:20:21 +0100 (CET)","by mail-lf1-x141.google.com with SMTP id i23so5621016lfo.7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Jan 2020 07:20:21 -0800 (PST)","from localhost (h-93-159.A463.priv.bahnhof.se. [46.59.93.159])\n\tby smtp.gmail.com with ESMTPSA id\n\to6sm651842lfg.11.2020.01.22.07.20.19\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 22 Jan 2020 07:20:19 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=ewoj2LHAvu0MXnVakS6cPynkFAsG28zz1Zjckz2CfpE=;\n\tb=Z3ggp33l72aidUPMMyqYXyl5ce4sFY4O2DISRQQh4zqisJjj9nMrkd8ZzsKhcE1riD\n\tYGjiLKTO54OhWVPML+Rp5nDJ/dBocpQikV6gS/gkujWB9B6WWFIGVHvPu9C7lEZZalUl\n\tDpuCHMlrf/fL0Btj9OloM8thmr7LmF+NmVKoyn6cCEP1rx5vDw5Cg6F66713XUmz3Goa\n\t/W5nxcwhj5MJsJdh+tcCM8u4+Jo8MP3HHFdKe/6daXGgYgoffQJWMAvrnl3+P/qEY40t\n\txINM7WsErQWG602DRNwVNmh//9q2IpTMKF5r6kRK818YhUrA0egW4rJiD+pKGLR2T2fl\n\tGA2w==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=ewoj2LHAvu0MXnVakS6cPynkFAsG28zz1Zjckz2CfpE=;\n\tb=LkIoTtzI/XwhYD5nmReIYdnCJJ/OzwYmaBcm7FEJRDwKHOZy3/Co+lxKheB1ijHcDe\n\t7tLXgoPLYeJfYXEo2MPasyoGHaMVndVN+7cbiL5XL4WGYQmo2e9WsYpunYjYfabFJR3V\n\ttuKKbcUDq8UfzerYWZCTbgC+5e8xLQqvuSOQ0umPKlyxNVWsvQi6ZPGr6kn8gSZIgu9W\n\t1M8jDjQ0SjNL21glr5HinnrktJ6zNyrajKqJVEUrt+F0AN+TjJqH/r9bIUv6QaeIghpk\n\tHuxsYnwa6e7lIOohJYGjqJvBLjA6nX5rST/u0cPiE4tFQnHcmmKrCDXq8n85ek5VIHYg\n\tn7BQ==","X-Gm-Message-State":"APjAAAWgepCPfYWAfY35cOYhwSgIlv/Hpgm8hYHFAuAJenBwvLeriWAI\n\t23YqTx/EY5eksMiyJ5l+psRLUfqEgEA=","X-Google-Smtp-Source":"APXvYqyyaIm80BO1LTW1BnbFA3X1ddLbjyNaZCK0p2neoJLMOb6kkNAlxkhzlGyA7/Pv0vCrWzn9Og==","X-Received":"by 2002:ac2:599c:: with SMTP id w28mr2108325lfn.78.1579706420324;\n\tWed, 22 Jan 2020 07:20:20 -0800 (PST)","Date":"Wed, 22 Jan 2020 16:20:19 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200122152019.GP1124294@oden.dyn.berto.se>","References":"<20200120002437.6633-1-laurent.pinchart@ideasonboard.com>\n\t<20200120002437.6633-9-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20200120002437.6633-9-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 08/19] test: signal: Add additional\n\tdisconnection tests for Object","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Wed, 22 Jan 2020 15:20:21 -0000"}}]