[{"id":25260,"web_url":"https://patchwork.libcamera.org/comment/25260/","msgid":"<1aae5513-5beb-bd51-8a42-907ea1390c5e@ideasonboard.com>","date":"2022-10-04T14:05:42","subject":"Re: [libcamera-devel] [PATCH] test: threads: Test thread cleanup\n\tupon abnormal termination","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 10/4/22 5:28 AM, Laurent Pinchart via libcamera-devel wrote:\n> If a thread ends abnormally (that is, without retuning normally from its\n> run() function, for instance with a direct call to pthread_cancel()),\n> thread cleanup should still be performed. Add a test to ensure this.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>   test/threads.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++\n>   1 file changed, 44 insertions(+)\n>\n> diff --git a/test/threads.cpp b/test/threads.cpp\n> index d83b5833998f..7daa76edb00e 100644\n> --- a/test/threads.cpp\n> +++ b/test/threads.cpp\n> @@ -8,7 +8,9 @@\n>   #include <chrono>\n>   #include <iostream>\n>   #include <memory>\n> +#include <pthread.h>\n>   #include <thread>\n> +#include <time.h>\n>   \n>   #include <libcamera/base/thread.h>\n>   \n> @@ -35,6 +37,32 @@ private:\n>   \tchrono::steady_clock::duration duration_;\n>   };\n>   \n> +class CancelThread : public Thread\n> +{\n> +public:\n> +\tCancelThread(bool &cancelled)\n> +\t\t: cancelled_(cancelled)\n> +\t{\n> +\t}\n> +\n> +protected:\n> +\tvoid run()\n> +\t{\n> +\t\tcancelled_ = true;\n> +\n> +\t\t/* Cancel the thread can call a guaranteed cancellation point. */\n> +\t\tpthread_cancel(pthread_self());\n> +\n> +\t\tstruct timespec req{ 0, 100*000*000 };\n> +\t\tnanosleep(&req, nullptr);\n\nTook a bit of reading to determine that nanosleep() is a cancellation \npoint :)\nMaybe it deserves a comment as well, upto you.\n\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n> +\n> +\t\tcancelled_ = false;\n> +\t}\n> +\n> +private:\n> +\tbool &cancelled_;\n> +};\n> +\n>   class ThreadTest : public Test\n>   {\n>   protected:\n> @@ -118,6 +146,22 @@ protected:\n>   \t\t\treturn TestFail;\n>   \t\t}\n>   \n> +\t\t/* Test thread cleanup upon abnormal termination. */\n> +\t\tbool cancelled = false;\n> +\t\tbool finished = false;\n> +\n> +\t\tthread = std::make_unique<CancelThread>(cancelled);\n> +\t\tthread->finished.connect(this, [&finished]() { finished = true; });\n> +\n> +\t\tthread->start();\n> +\t\tthread->exit(0);\n> +\t\tthread->wait(chrono::milliseconds(1000));\n> +\n> +\t\tif (!cancelled || !finished) {\n> +\t\t\tcout << \"Cleanup failed upon abnormal termination\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n>   \t\treturn TestPass;\n>   \t}\n>","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 9EA30C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Oct 2022 14:05:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A795D60AA9;\n\tTue,  4 Oct 2022 16:05:50 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2224F601C7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Oct 2022 16:05:49 +0200 (CEST)","from [192.168.1.103] (unknown [103.251.226.94])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D95882D9;\n\tTue,  4 Oct 2022 16:05:47 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664892350;\n\tbh=s083zWuAnn/ILjmWdoEfpZprS/gWXQ6LTw0Ct3DjWIc=;\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:\n\tFrom;\n\tb=hIQ2L92Teh9vhOP156k6IJErb0o2/uG5RyyYUUlvEpvwOjIMDhOrEKJ+WYMfLmBQM\n\tqDOcmU6hzrh6LtueiI7DYw79R+Z5ON6cWPIfNyyzc20Y2/B7ECXnPSS7W+HoF1s3Mn\n\tR/mc8n7y4U0QMWguxinUU7Eqt2LfRvBEHwbJp0RQY6qQbflnk3p968XZEAUArum1rS\n\t7d71hDafmTlTDbCTN5LRNwLjS0OIMx2hJGWaJ+XtorN/w3m5Io3DSMfvaFf+kuVI4M\n\tkEloUNSis4L/VG0ROgLoXZ9uO6tT7waguocTI2K2dRfeB68Z9nn3GuIe4s6kHM6pfT\n\tI8fDt1RdJtTDA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664892348;\n\tbh=s083zWuAnn/ILjmWdoEfpZprS/gWXQ6LTw0Ct3DjWIc=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=IWDsLbhik/RoUHYB+m3bzqGeaI1/MSQvDFyl1O/cuDASMnN1ONtANiBair2bevx3a\n\tZXJuCgc9QRd0qjT+IxbzAqoGtvVuG0K5fM0WxLA0ga4SJerVr7Si0nlmqT1R47OGn8\n\t62Q6NnAdC7gOT4OMDyVmwD0oomwYEbbTy5i5n5P0="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"IWDsLbhi\"; dkim-atps=neutral","Message-ID":"<1aae5513-5beb-bd51-8a42-907ea1390c5e@ideasonboard.com>","Date":"Tue, 4 Oct 2022 19:35:42 +0530","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n\tThunderbird/102.2.1","Content-Language":"en-US","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20221003235843.19175-1-laurent.pinchart@ideasonboard.com>","In-Reply-To":"<20221003235843.19175-1-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] test: threads: Test thread cleanup\n\tupon abnormal termination","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25261,"web_url":"https://patchwork.libcamera.org/comment/25261/","msgid":"<Yzw/ondzyD6rGDcA@pendragon.ideasonboard.com>","date":"2022-10-04T14:13:54","subject":"Re: [libcamera-devel] [PATCH] test: threads: Test thread cleanup\n\tupon abnormal termination","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Tue, Oct 04, 2022 at 07:35:42PM +0530, Umang Jain wrote:\n> On 10/4/22 5:28 AM, Laurent Pinchart via libcamera-devel wrote:\n> > If a thread ends abnormally (that is, without retuning normally from its\n> > run() function, for instance with a direct call to pthread_cancel()),\n> > thread cleanup should still be performed. Add a test to ensure this.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >   test/threads.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++\n> >   1 file changed, 44 insertions(+)\n> >\n> > diff --git a/test/threads.cpp b/test/threads.cpp\n> > index d83b5833998f..7daa76edb00e 100644\n> > --- a/test/threads.cpp\n> > +++ b/test/threads.cpp\n> > @@ -8,7 +8,9 @@\n> >   #include <chrono>\n> >   #include <iostream>\n> >   #include <memory>\n> > +#include <pthread.h>\n> >   #include <thread>\n> > +#include <time.h>\n> >   \n> >   #include <libcamera/base/thread.h>\n> >   \n> > @@ -35,6 +37,32 @@ private:\n> >   \tchrono::steady_clock::duration duration_;\n> >   };\n> >   \n> > +class CancelThread : public Thread\n> > +{\n> > +public:\n> > +\tCancelThread(bool &cancelled)\n> > +\t\t: cancelled_(cancelled)\n> > +\t{\n> > +\t}\n> > +\n> > +protected:\n> > +\tvoid run()\n> > +\t{\n> > +\t\tcancelled_ = true;\n> > +\n> > +\t\t/* Cancel the thread can call a guaranteed cancellation point. */\n\nI meant s/can/and/. I'll turn this into\n\n\t\t/*\n\t\t * Cancel the thread can call a guaranteed cancellation point\n\t\t *(nanosleep).\n\t\t */\n\n> > +\t\tpthread_cancel(pthread_self());\n> > +\n> > +\t\tstruct timespec req{ 0, 100*000*000 };\n> > +\t\tnanosleep(&req, nullptr);\n> \n> Took a bit of reading to determine that nanosleep() is a cancellation \n> point :)\n> Maybe it deserves a comment as well, upto you.\n> \n> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n> \n> > +\n> > +\t\tcancelled_ = false;\n> > +\t}\n> > +\n> > +private:\n> > +\tbool &cancelled_;\n> > +};\n> > +\n> >   class ThreadTest : public Test\n> >   {\n> >   protected:\n> > @@ -118,6 +146,22 @@ protected:\n> >   \t\t\treturn TestFail;\n> >   \t\t}\n> >   \n> > +\t\t/* Test thread cleanup upon abnormal termination. */\n> > +\t\tbool cancelled = false;\n> > +\t\tbool finished = false;\n> > +\n> > +\t\tthread = std::make_unique<CancelThread>(cancelled);\n> > +\t\tthread->finished.connect(this, [&finished]() { finished = true; });\n> > +\n> > +\t\tthread->start();\n> > +\t\tthread->exit(0);\n> > +\t\tthread->wait(chrono::milliseconds(1000));\n> > +\n> > +\t\tif (!cancelled || !finished) {\n> > +\t\t\tcout << \"Cleanup failed upon abnormal termination\" << endl;\n> > +\t\t\treturn TestFail;\n> > +\t\t}\n> > +\n> >   \t\treturn TestPass;\n> >   \t}\n> >","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 BDD47BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Oct 2022 14:13:59 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C9EB360AA9;\n\tTue,  4 Oct 2022 16:13:58 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E9359601C7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Oct 2022 16:13:57 +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 457DF2D9;\n\tTue,  4 Oct 2022 16:13:57 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664892838;\n\tbh=hxFkOjxfkGDMjhYGTm7rSo334HedOSSbOSpv3VfEcWE=;\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=X7ZhUUhXbLgYcW6Q7usMQGS8t9xs0UnRigKhCk+EHHiJye0w6Nv0zfJ6qSljH+I33\n\txXFBU9fKcmo2gdp0D8NbxAyAaf3np6x/XG5+YRQF5k1WBgLSPQsJ1fDsZyOwoCIAKC\n\tB183Q3vaLC9ihDcl6l+2A7DefL0H/cISbBFc1gzKD5NRWV8rNpSnmRw4LWjLljYNQy\n\tEn6Q6NdIUaJ0xdWpQcTOzwG9n2dw8Y8dn3pp9HF2GGeEALLP4dpF/xlFvT2er5V80M\n\tBRPshA+hS2MQon/3P5rZEQHM/8MOqGPDPbFDlBDjW6zjW2HNpg2braCmCbXAPyiv77\n\tXeCRzMuDWhiyg==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664892837;\n\tbh=hxFkOjxfkGDMjhYGTm7rSo334HedOSSbOSpv3VfEcWE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=gC1HDZ3T6kMMeRvPKx1m8PNgdXV4aBmRv0HA0HKO50JYHUhxoYMImJcF5KktoWaBr\n\tDjFsyyM5/eei/M/CACgQOwED4t4M+KwiGQ1Qze5hIYjs74kWRU88uj+6wuhKw0B7Tk\n\tZ3e4/Oq/SbWn+edSG1NALHBDYNu3D2nYglStGkf4="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"gC1HDZ3T\"; dkim-atps=neutral","Date":"Tue, 4 Oct 2022 17:13:54 +0300","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<Yzw/ondzyD6rGDcA@pendragon.ideasonboard.com>","References":"<20221003235843.19175-1-laurent.pinchart@ideasonboard.com>\n\t<1aae5513-5beb-bd51-8a42-907ea1390c5e@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<1aae5513-5beb-bd51-8a42-907ea1390c5e@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] test: threads: Test thread cleanup\n\tupon abnormal termination","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":25262,"web_url":"https://patchwork.libcamera.org/comment/25262/","msgid":"<0412e261-5721-3af4-1ada-13b99748090e@ideasonboard.com>","date":"2022-10-04T14:14:57","subject":"Re: [libcamera-devel] [PATCH] test: threads: Test thread cleanup\n\tupon abnormal termination","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi,\n\nOn 10/4/22 7:43 PM, Laurent Pinchart wrote:\n> On Tue, Oct 04, 2022 at 07:35:42PM +0530, Umang Jain wrote:\n>> On 10/4/22 5:28 AM, Laurent Pinchart via libcamera-devel wrote:\n>>> If a thread ends abnormally (that is, without retuning normally from its\n>>> run() function, for instance with a direct call to pthread_cancel()),\n>>> thread cleanup should still be performed. Add a test to ensure this.\n>>>\n>>> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>>> ---\n>>>    test/threads.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++\n>>>    1 file changed, 44 insertions(+)\n>>>\n>>> diff --git a/test/threads.cpp b/test/threads.cpp\n>>> index d83b5833998f..7daa76edb00e 100644\n>>> --- a/test/threads.cpp\n>>> +++ b/test/threads.cpp\n>>> @@ -8,7 +8,9 @@\n>>>    #include <chrono>\n>>>    #include <iostream>\n>>>    #include <memory>\n>>> +#include <pthread.h>\n>>>    #include <thread>\n>>> +#include <time.h>\n>>>    \n>>>    #include <libcamera/base/thread.h>\n>>>    \n>>> @@ -35,6 +37,32 @@ private:\n>>>    \tchrono::steady_clock::duration duration_;\n>>>    };\n>>>    \n>>> +class CancelThread : public Thread\n>>> +{\n>>> +public:\n>>> +\tCancelThread(bool &cancelled)\n>>> +\t\t: cancelled_(cancelled)\n>>> +\t{\n>>> +\t}\n>>> +\n>>> +protected:\n>>> +\tvoid run()\n>>> +\t{\n>>> +\t\tcancelled_ = true;\n>>> +\n>>> +\t\t/* Cancel the thread can call a guaranteed cancellation point. */\n> I meant s/can/and/. I'll turn this into\n>\n> \t\t/*\n> \t\t * Cancel the thread can call a guaranteed cancellation point\n> \t\t *(nanosleep).\n> \t\t */\n\nPerfect, thanks!\n>>> +\t\tpthread_cancel(pthread_self());\n>>> +\n>>> +\t\tstruct timespec req{ 0, 100*000*000 };\n>>> +\t\tnanosleep(&req, nullptr);\n>> Took a bit of reading to determine that nanosleep() is a cancellation\n>> point :)\n>> Maybe it deserves a comment as well, upto you.\n>>\n>> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n>>\n>>> +\n>>> +\t\tcancelled_ = false;\n>>> +\t}\n>>> +\n>>> +private:\n>>> +\tbool &cancelled_;\n>>> +};\n>>> +\n>>>    class ThreadTest : public Test\n>>>    {\n>>>    protected:\n>>> @@ -118,6 +146,22 @@ protected:\n>>>    \t\t\treturn TestFail;\n>>>    \t\t}\n>>>    \n>>> +\t\t/* Test thread cleanup upon abnormal termination. */\n>>> +\t\tbool cancelled = false;\n>>> +\t\tbool finished = false;\n>>> +\n>>> +\t\tthread = std::make_unique<CancelThread>(cancelled);\n>>> +\t\tthread->finished.connect(this, [&finished]() { finished = true; });\n>>> +\n>>> +\t\tthread->start();\n>>> +\t\tthread->exit(0);\n>>> +\t\tthread->wait(chrono::milliseconds(1000));\n>>> +\n>>> +\t\tif (!cancelled || !finished) {\n>>> +\t\t\tcout << \"Cleanup failed upon abnormal termination\" << endl;\n>>> +\t\t\treturn TestFail;\n>>> +\t\t}\n>>> +\n>>>    \t\treturn TestPass;\n>>>    \t}\n>>>","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 96865BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Oct 2022 14:15:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4F93160AAB;\n\tTue,  4 Oct 2022 16:15:04 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 064BF601C7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Oct 2022 16:15:03 +0200 (CEST)","from [192.168.1.103] (unknown [103.251.226.94])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D818F2D9;\n\tTue,  4 Oct 2022 16:15:01 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664892904;\n\tbh=6A1tOZX0agGR3qw4rmMotTTD9eMSKUkOTD85LpnkP4M=;\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=yaQTl+M0XSs8FIGz141c8Ms5oOgJKuPQonN7fPCOVw7wi88s3EjdDKe1kFm/4YHU+\n\tDCCr77m6B6/WAzGsEIvaH+k3RXN90AsH6PkOcKylEUcFargvfch+OtkOtcBvdKy2OM\n\t5Bz1f59sEoWVXa1bqW530NecTdWwIKmMJId5i0J1ITHVItdqMJN9aRq3aldW7g2k/k\n\tlkiRgJWO9Klxko7dgu1iCRI0/alUBh2/t+ovRLfTAbbcubud7iQ++ybzGRhcYrCSnM\n\tqJZbq73SJ4ECLccsFjmysntWG5XuuFGxU8UrPaBEu1CEUke/O6DNHDOTjBpCOs4fo4\n\tfD8EMsiozCq9Q==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664892902;\n\tbh=6A1tOZX0agGR3qw4rmMotTTD9eMSKUkOTD85LpnkP4M=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=QbYyQ5YtJzrlmJQW23+2tRAQdPmxP3W055y3ELupe6gFfWgoZ8qEN1gdfmvtzQ+oQ\n\t4izjMeoY1sdBUBpMoenuhX1WjdHogfO1rXngCMpRObywyT955r3axMdzaPNoMi2dxA\n\tRPpK1wpg39aSdGHhQZLAuNk9weiuHt+MmXM4HS6o="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"QbYyQ5Yt\"; dkim-atps=neutral","Message-ID":"<0412e261-5721-3af4-1ada-13b99748090e@ideasonboard.com>","Date":"Tue, 4 Oct 2022 19:44:57 +0530","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n\tThunderbird/102.2.1","Content-Language":"en-US","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20221003235843.19175-1-laurent.pinchart@ideasonboard.com>\n\t<1aae5513-5beb-bd51-8a42-907ea1390c5e@ideasonboard.com>\n\t<Yzw/ondzyD6rGDcA@pendragon.ideasonboard.com>","In-Reply-To":"<Yzw/ondzyD6rGDcA@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] test: threads: Test thread cleanup\n\tupon abnormal termination","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>"}}]