[{"id":16858,"web_url":"https://patchwork.libcamera.org/comment/16858/","msgid":"<CAHW6GYKXROJWTUvv=rFkWebahq5X-vye4aecPwyx6RA1J6xj4g@mail.gmail.com>","date":"2021-05-10T12:54:21","subject":"Re: [libcamera-devel] [PATCH v6 3/6] ipa: raspberrypi: Switch to\n\tstd::scoped_lock in the Metadata class","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"HI Naush\n\nThanks for this patch. I must confess I haven't encountered this\n\"scoped_lock\" before, but it seems to be just the ticket.\n\nOn Mon, 10 May 2021 at 10:59, Naushir Patuck <naush@raspberrypi.com> wrote:\n>\n> Replace std::lock_guard with std::scoped_lock. When locking a single\n> mutex, both are functionally the same. When locking two mutexes in the\n> operator= overload, the scoped_lock uses a deadlock avoidance algorithm\n> to avoid deadlock.\n>\n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n\nReviewed-by: David Plowman <david.plowman@raspberrypi.com>\n\nThanks!\nDavid\n\n> ---\n>  src/ipa/raspberrypi/controller/metadata.hpp | 9 ++++-----\n>  1 file changed, 4 insertions(+), 5 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/controller/metadata.hpp b/src/ipa/raspberrypi/controller/metadata.hpp\n> index 07dd28ed9e0a..e735cfbe0480 100644\n> --- a/src/ipa/raspberrypi/controller/metadata.hpp\n> +++ b/src/ipa/raspberrypi/controller/metadata.hpp\n> @@ -22,14 +22,14 @@ public:\n>         template<typename T>\n>         void Set(std::string const &tag, T const &value)\n>         {\n> -               std::lock_guard<std::mutex> lock(mutex_);\n> +               std::scoped_lock lock(mutex_);\n>                 data_[tag] = value;\n>         }\n>\n>         template<typename T>\n>         int Get(std::string const &tag, T &value) const\n>         {\n> -               std::lock_guard<std::mutex> lock(mutex_);\n> +               std::scoped_lock lock(mutex_);\n>                 auto it = data_.find(tag);\n>                 if (it == data_.end())\n>                         return -1;\n> @@ -39,14 +39,13 @@ public:\n>\n>         void Clear()\n>         {\n> -               std::lock_guard<std::mutex> lock(mutex_);\n> +               std::scoped_lock lock(mutex_);\n>                 data_.clear();\n>         }\n>\n>         Metadata &operator=(Metadata const &other)\n>         {\n> -               std::lock_guard<std::mutex> lock(mutex_);\n> -               std::lock_guard<std::mutex> other_lock(other.mutex_);\n> +               std::scoped_lock lock(mutex_, other.mutex_);\n>                 data_ = other.data_;\n>                 return *this;\n>         }\n> --\n> 2.25.1\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 A66F5BF829\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 10 May 2021 12:54:35 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1E5B7688E5;\n\tMon, 10 May 2021 14:54:35 +0200 (CEST)","from mail-wr1-x429.google.com (mail-wr1-x429.google.com\n\t[IPv6:2a00:1450:4864:20::429])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 19710602BE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 10 May 2021 14:54:33 +0200 (CEST)","by mail-wr1-x429.google.com with SMTP id n2so16573003wrm.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 10 May 2021 05:54:33 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"BH2hcfD4\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=AYTlOkoW/GnocKVVUSnzWjJNKA/w0+DOtTNWoHy6j28=;\n\tb=BH2hcfD4jELYhmvlhwCCIV/LfyNph9bTOmSu6eDopzM9v9otp8XGsB3RwqEFIBPLwk\n\tKh5j9WWaI3XM6MQU6wXD1lKc+Jn0XdKLNYmSE3DcsOGR4rVsisL0A4l5aaHkuyCXu55c\n\tMw7Sjer2/S+n/0BJFSEFOOMz5t/Q+j7QE8g0CjbQ6OgZRtuxsqIVl/WNnJoq0jM6yTpy\n\t2ev2WbWhO32JjkGtEfmu2rM3RVFiVJNyLGxeU0NgI8XOuK8cTTi9NfDkptkYvD8R4V8L\n\tJQ7fFbahgdXKcxLII60yYRL19d6SlRcjyie9LDM11XMlROyvfPTJOWo5J0U0ZovLXLW9\n\tYmFg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=AYTlOkoW/GnocKVVUSnzWjJNKA/w0+DOtTNWoHy6j28=;\n\tb=DFYetFTteReAwhnORPcy1nbOPVflcrGwXzwOii46aJTWYsnTmutQcpBBFzVgtyS1lz\n\tAKXaDAv10xaRTn+eRJgEYLlYClwCx9FQSUQwH05kNNqI/RqtYh0nlpPjqD7MWaGBimPF\n\tXFBWLRlm4lcF2g1yM89dAQdLebEoAEhdgH3jttMvBg8aOO3v1yEplXS0Ri9CPDC/AOpQ\n\tSQ0bVecm3/IShuy7+j7g+seouQk4p4cM7jLwnOJWOh1nVjTHdotmY6sSMlrYB0OLoRkO\n\tZxjxgbbPxg8t4U+WG5epVYHDxXSxrjRc4Ncmi4qvM53c7i3TsRmxihBw3yz0+ha29RLl\n\tc3eQ==","X-Gm-Message-State":"AOAM5322vw/0L927NJMdOCIJwLrHYCbig9pCxf79cf4tZDr07+LDRC0h\n\tHC3IOV+at/fjAwqUVv4ZuP3UpwC2q/7hsvSvTno2rg==","X-Google-Smtp-Source":"ABdhPJwEdHwo8pAw+0wzu4h8NxxRHIHaoSFOWflV7Pe2TIpytKXlfWKF2BsMcMBhSsPujlkFQTtMPFX4jk2Z9N8/O8I=","X-Received":"by 2002:a05:6000:18a4:: with SMTP id\n\tb4mr29862196wri.86.1620651272700; \n\tMon, 10 May 2021 05:54:32 -0700 (PDT)","MIME-Version":"1.0","References":"<20210510095814.3732400-1-naush@raspberrypi.com>\n\t<20210510095814.3732400-4-naush@raspberrypi.com>","In-Reply-To":"<20210510095814.3732400-4-naush@raspberrypi.com>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Mon, 10 May 2021 13:54:21 +0100","Message-ID":"<CAHW6GYKXROJWTUvv=rFkWebahq5X-vye4aecPwyx6RA1J6xj4g@mail.gmail.com>","To":"Naushir Patuck <naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v6 3/6] ipa: raspberrypi: Switch to\n\tstd::scoped_lock in the Metadata class","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":16874,"web_url":"https://patchwork.libcamera.org/comment/16874/","msgid":"<YJnGRv5N4t+AiYTH@pendragon.ideasonboard.com>","date":"2021-05-10T23:48:22","subject":"Re: [libcamera-devel] [PATCH v6 3/6] ipa: raspberrypi: Switch to\n\tstd::scoped_lock in the Metadata class","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Naush,\n\nThank you for the patch.\n\nOn Mon, May 10, 2021 at 10:58:12AM +0100, Naushir Patuck wrote:\n> Replace std::lock_guard with std::scoped_lock. When locking a single\n> mutex, both are functionally the same. When locking two mutexes in the\n> operator= overload, the scoped_lock uses a deadlock avoidance algorithm\n> to avoid deadlock.\n> \n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  src/ipa/raspberrypi/controller/metadata.hpp | 9 ++++-----\n>  1 file changed, 4 insertions(+), 5 deletions(-)\n> \n> diff --git a/src/ipa/raspberrypi/controller/metadata.hpp b/src/ipa/raspberrypi/controller/metadata.hpp\n> index 07dd28ed9e0a..e735cfbe0480 100644\n> --- a/src/ipa/raspberrypi/controller/metadata.hpp\n> +++ b/src/ipa/raspberrypi/controller/metadata.hpp\n> @@ -22,14 +22,14 @@ public:\n>  \ttemplate<typename T>\n>  \tvoid Set(std::string const &tag, T const &value)\n>  \t{\n> -\t\tstd::lock_guard<std::mutex> lock(mutex_);\n> +\t\tstd::scoped_lock lock(mutex_);\n>  \t\tdata_[tag] = value;\n>  \t}\n>  \n>  \ttemplate<typename T>\n>  \tint Get(std::string const &tag, T &value) const\n>  \t{\n> -\t\tstd::lock_guard<std::mutex> lock(mutex_);\n> +\t\tstd::scoped_lock lock(mutex_);\n>  \t\tauto it = data_.find(tag);\n>  \t\tif (it == data_.end())\n>  \t\t\treturn -1;\n> @@ -39,14 +39,13 @@ public:\n>  \n>  \tvoid Clear()\n>  \t{\n> -\t\tstd::lock_guard<std::mutex> lock(mutex_);\n> +\t\tstd::scoped_lock lock(mutex_);\n>  \t\tdata_.clear();\n>  \t}\n>  \n>  \tMetadata &operator=(Metadata const &other)\n>  \t{\n> -\t\tstd::lock_guard<std::mutex> lock(mutex_);\n> -\t\tstd::lock_guard<std::mutex> other_lock(other.mutex_);\n> +\t\tstd::scoped_lock lock(mutex_, other.mutex_);\n>  \t\tdata_ = other.data_;\n>  \t\treturn *this;\n>  \t}","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 7B199BF839\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 10 May 2021 23:48:31 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E9DB668911;\n\tTue, 11 May 2021 01:48:30 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 87055602B8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 11 May 2021 01:48:29 +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 E0DFA6EF;\n\tTue, 11 May 2021 01:48:28 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"BAT+AKMD\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1620690509;\n\tbh=IESpY9c+m3FP7Xn1YsESLCHzBqgOb1juu0dhAZbnFTg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=BAT+AKMDsSi6rexHOq1vFu6BIgySqpxjLcdu/o1/Tjy78g5dRnHkyOlY+I/qirANc\n\tlj858BMFJh6XWhjQ5HSVjO76f8QKSOTR7s28uLaIG4uxS/nc1GgO121vwRa1Ps/evl\n\tsWKro7AO8k7VafID4QEyS+qZUoyBG+6y3rcV90pY=","Date":"Tue, 11 May 2021 02:48:22 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<YJnGRv5N4t+AiYTH@pendragon.ideasonboard.com>","References":"<20210510095814.3732400-1-naush@raspberrypi.com>\n\t<20210510095814.3732400-4-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210510095814.3732400-4-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v6 3/6] ipa: raspberrypi: Switch to\n\tstd::scoped_lock in the Metadata class","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>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]