[{"id":23475,"web_url":"https://patchwork.libcamera.org/comment/23475/","msgid":"<YrAva+sUcsWGWopC@pendragon.ideasonboard.com>","date":"2022-06-20T08:27:23","subject":"Re: [libcamera-devel] [PATCH] libcamera: base: thread: Protect\n\texitCode by mutex in exit()","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Umang,\n\nThank you for the patch.\n\nOn Mon, Jun 20, 2022 at 10:41:50AM +0530, Umang Jain via libcamera-devel wrote:\n> From: Hirokazu Honda <hiroh@chromium.org>\n> \n> Thread::exit() accesses data_->exitCode without acquiring a lock.\n> Fix it.\n\nCould you explain here why the lock is needed ?\n\n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> ---\n>  src/libcamera/base/thread.cpp | 3 +++\n>  1 file changed, 3 insertions(+)\n> \n> diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp\n> index 6bda9d14..ff65641e 100644\n> --- a/src/libcamera/base/thread.cpp\n> +++ b/src/libcamera/base/thread.cpp\n> @@ -392,7 +392,10 @@ void Thread::finishThread()\n>   */\n>  void Thread::exit(int code)\n>  {\n> +\tdata_->mutex_.lock();\n>  \tdata_->exitCode_ = code;\n> +\tdata_->mutex_.unlock();\n> +\n>  \tdata_->exit_.store(true, std::memory_order_release);\n>  \n>  \tEventDispatcher *dispatcher = data_->dispatcher_.load(std::memory_order_relaxed);","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 7B3DEBE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Jun 2022 08:27:40 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DEE8565635;\n\tMon, 20 Jun 2022 10:27:39 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DB31C60473\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Jun 2022 10:27:38 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 434BD892;\n\tMon, 20 Jun 2022 10:27:38 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1655713659;\n\tbh=n/Qte2I7MRFOevaR14gUeS848hSfreM2Sdvk44EJu1E=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=sgKQYZzPcr+yH+KwWFnk1ATgQ9mOgyNkAprTJ96WTR8JnPNZJeyDk94kL/aEMJT7V\n\tROfTgxh3PnXoxMYeBDeLhU2cBlIOQ2dZa5nFJHC4aSn/YhAcs6PT9OBkEzftDAv/Dm\n\tS2l+2h6JLVeT17g+CO1bIHtTIf4FgQSFDrBUUSvCu089AtafEqQKEXSsMRpFFY8sWL\n\tZiEK8Bg3QFMTKyu4a+ar43KmM+bz05E+D9LvhL4DZHLim9d5mxZJbgCb0Q+DN+mLA6\n\tgC9K1LGVYIzeOZSChlO3bJXHXtKXFvRp36JP7jh9cXi/Njvb7tw5X/gD2tP6LW0uMb\n\tjgOIQBdWxYjJQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1655713658;\n\tbh=n/Qte2I7MRFOevaR14gUeS848hSfreM2Sdvk44EJu1E=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=QIB7HyOQL5RtjveYygk3tg4+fiuUtd1y5XRVA2Os4tYxFth4jeE5GgppXcQsRaToA\n\tXBnbSWMYHk/MubFHsae3lsvylDcg/Omw7NwTtGx8uGNs4r8LqWEBkr1R5sDW5KHCab\n\trHreBBCVefnMMeuZbBkiGAZTah2izp0QaV/duFDQ="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"QIB7HyOQ\"; dkim-atps=neutral","Date":"Mon, 20 Jun 2022 11:27:23 +0300","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<YrAva+sUcsWGWopC@pendragon.ideasonboard.com>","References":"<20220620051150.361575-1-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220620051150.361575-1-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: base: thread: Protect\n\texitCode by mutex in exit()","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23477,"web_url":"https://patchwork.libcamera.org/comment/23477/","msgid":"<48c2e0f6-09ff-e409-3bee-2be15242de70@ideasonboard.com>","date":"2022-06-20T08:47:04","subject":"Re: [libcamera-devel] [PATCH] libcamera: base: thread: Protect\n\texitCode by mutex in exit()","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi,\n\nOn 6/20/22 13:57, Laurent Pinchart wrote:\n> Hi Umang,\n>\n> Thank you for the patch.\n>\n> On Mon, Jun 20, 2022 at 10:41:50AM +0530, Umang Jain via libcamera-devel wrote:\n>> From: Hirokazu Honda <hiroh@chromium.org>\n>>\n>> Thread::exit() accesses data_->exitCode without acquiring a lock.\n>> Fix it.\n> Could you explain here why the lock is needed ?\n\nThis is originally from \"Apply clang thread safety annotation \nlibcamera-core and v4l2\" series\n\nIsn't exitCode_ should always be accessed with the lock? It seems so, in \nthe Thread class.\n\nI get it it's exit() / cleanup part so we might not care of the locking,\nbut when we introduce thread annotation, it becomes a source of \ncomplaining, hence the patch.\n\n>\n>> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n>> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n>> ---\n>>   src/libcamera/base/thread.cpp | 3 +++\n>>   1 file changed, 3 insertions(+)\n>>\n>> diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp\n>> index 6bda9d14..ff65641e 100644\n>> --- a/src/libcamera/base/thread.cpp\n>> +++ b/src/libcamera/base/thread.cpp\n>> @@ -392,7 +392,10 @@ void Thread::finishThread()\n>>    */\n>>   void Thread::exit(int code)\n>>   {\n>> +\tdata_->mutex_.lock();\n>>   \tdata_->exitCode_ = code;\n>> +\tdata_->mutex_.unlock();\n>> +\n>>   \tdata_->exit_.store(true, std::memory_order_release);\n>>   \n>>   \tEventDispatcher *dispatcher = data_->dispatcher_.load(std::memory_order_relaxed);","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 5FAC9BD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Jun 2022 08:47:12 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A6C4765635;\n\tMon, 20 Jun 2022 10:47:11 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C238A60473\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Jun 2022 10:47:09 +0200 (CEST)","from [IPV6:2401:4900:1f3f:e389:cb58:4104:f66:a571] (unknown\n\t[IPv6:2401:4900:1f3f:e389:cb58:4104:f66:a571])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id AD42A883;\n\tMon, 20 Jun 2022 10:47:08 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1655714831;\n\tbh=GuGTOxU6bSFNaOowruLSgGYjudeWNwRZ+egHkJmsVjU=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=JxIDLq/KbyH3IWXhgH72BrU0O5csrmZPf6GA8Cvq85fZlu9wrr9/i40MVWAbjO+Ts\n\t9CxbX4DYNQXjSUizSslnxoNS3kxmqoNxTo4eIMDN85G731nMAi27SPH633DNA1I0n9\n\tRk2y55SDat7Qj5KLS2gsZxe+iiVmHeLqrtCwaNK0QECMMfOBvfWz/YfHC2htM60xT0\n\tNtsBD4U2fuUoIiHHshO21xkBAW3C8SHUs6W85K/PqeTPAvyg93h8nDbyjQv0HCpsJe\n\tyrhEdCXLG3GZLHgucfImJCkU+wB8334xW6Ftx2bhjM+JSU8BJGFlDO9KjbsNCyNYTD\n\tRSHuRiU76Zr/A==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1655714829;\n\tbh=GuGTOxU6bSFNaOowruLSgGYjudeWNwRZ+egHkJmsVjU=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=E1qnfHmVAmnNxieR1FpXQaS3AkWYsxY/BbZdVE/XDyO5DgQK927Cc5ZNz/6w0CPcV\n\t9inQIeby2u0AVuvNZw123DSuPFY+D/RlrVr6v2RJMij06ebgHXRiISwnq9XdWvsRpO\n\tPL982UMjystkz/S6571p8MPLPrz6R8oYO81Fk6H0="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"E1qnfHmV\"; dkim-atps=neutral","Message-ID":"<48c2e0f6-09ff-e409-3bee-2be15242de70@ideasonboard.com>","Date":"Mon, 20 Jun 2022 14:17:04 +0530","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101\n\tThunderbird/91.4.1","Content-Language":"en-US","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20220620051150.361575-1-umang.jain@ideasonboard.com>\n\t<YrAva+sUcsWGWopC@pendragon.ideasonboard.com>","In-Reply-To":"<YrAva+sUcsWGWopC@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] libcamera: base: thread: Protect\n\texitCode by mutex in exit()","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>","From":"Umang Jain via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Umang Jain <umang.jain@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]