[{"id":28551,"web_url":"https://patchwork.libcamera.org/comment/28551/","msgid":"<87wms16tlk.fsf@redhat.com>","date":"2024-01-22T19:44:39","subject":"Re: [PATCH 04/12] libcamera: thread: Ensure deferred deletion of\n\tall objects before stopping","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Laurent Pinchart <laurent.pinchart@ideasonboard.com> writes:\n\n> Objects can be scheduled for deletion with Object::deleteLater(), which\n> queues a deferred deletion to the thread's event loop. As the\n> deleteLater() function is meant to be called from a different thread,\n> this may race with thread termination, and deferred deletions queued\n> just before calling Thread::exit() may not be processed by the event\n> loop. Make sure they get processed when finishing the thread, before\n> stopping.\n\nDoes this eliminate the race completely or does it just reduce it significantly?\nThis should be mentioned and if a possible race still exists, it would be good\nto mention the practical benefits of the change (like making tests reliable).\n\ndeleteLater() documentation is not clear (on purpose?) about whether the\ndeletion is guaranteed to be run.  Maybe worth to clarify it there.\n\n> This fixes a failure in the object-delete unit test.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/libcamera/base/thread.cpp | 6 ++++++\n>  1 file changed, 6 insertions(+)\n>\n> diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp\n> index 75693c92a0b1..4ac72036aa69 100644\n> --- a/src/libcamera/base/thread.cpp\n> +++ b/src/libcamera/base/thread.cpp\n> @@ -371,6 +371,12 @@ void Thread::run()\n>  \n>  void Thread::finishThread()\n>  {\n> +\t/*\n> +\t * Objects may have been scheduled for deletion right before the thread\n> +\t * exited. Ensure they get deleted now, before the thread stops.\n> +\t */\n> +\tdispatchMessages(Message::Type::DeferredDelete);\n> +\n>  \tdata_->mutex_.lock();\n>  \tdata_->running_ = false;\n>  \tdata_->mutex_.unlock();","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 932ABBDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 22 Jan 2024 19:44:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 12DD7628B7;\n\tMon, 22 Jan 2024 20:44:48 +0100 (CET)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0D3C961D30\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 22 Jan 2024 20:44:45 +0100 (CET)","from mail-wr1-f69.google.com (mail-wr1-f69.google.com\n\t[209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-85-UYpBtHQhOgKD5hjFtAi5IA-1; Mon, 22 Jan 2024 14:44:43 -0500","by mail-wr1-f69.google.com with SMTP id\n\tffacd0b85a97d-33770774fe4so2332733f8f.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 22 Jan 2024 11:44:43 -0800 (PST)","from nuthatch (ip-77-48-47-2.net.vodafone.cz. [77.48.47.2])\n\tby smtp.gmail.com with ESMTPSA id\n\to10-20020a5d62ca000000b00337d4ce6ab4sm11583155wrv.20.2024.01.22.11.44.39\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 22 Jan 2024 11:44:40 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"i2UwJfoS\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1705952685;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=CByJy0zzc0hb30+TXk727ohcdlaV/Yt9vZ5/bwZCEDU=;\n\tb=i2UwJfoSdAZQBtazXlqxJ/Sxhe4aar1CAbShiJeOSdjNEDe+z/pL7e9NVUazPpa08vi4nS\n\t4PbEAIVVkBswKcsSmmjbVAABYI1vety7a5Q6aE41bn1T6gwba9xkpzqKInXSopiuNexmym\n\tjJ12qcvp6+artfg/LZ6XokDKn8xbJyw=","X-MC-Unique":"UYpBtHQhOgKD5hjFtAi5IA-1","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1705952681; x=1706557481;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=CByJy0zzc0hb30+TXk727ohcdlaV/Yt9vZ5/bwZCEDU=;\n\tb=HmW9KsN8o31PQgni3avHHYQEYpfO29SMq2nlO4J4BdqBODS7OCDqPcKDwGaYBfDfj8\n\tKFvup/HapnYKtrjJtWXEjUxSmZApETkWYZS0fmjkUcW8A6BRSr9810y4cgOLy5wckhTu\n\tT24vQ71ztSMeyENl8as3zY1c056B8D/gAIhyKeadv4zDs8NrjbaB2VzHWi1BqudUTqry\n\tzDb6EZuf825NeGkvfosDPRspaIdxT4vX57ltdoQUNbSNDb1uw4G9EL/FTwr/OCWq5TuN\n\tGf0PWiGxuVqPqHpLtsZI0vX+sQ+7QyBEyoFTPMFNz+iv1dgrOpDH1AlnUroXouMglMPF\n\txbkw==","X-Gm-Message-State":"AOJu0Yzg0XhlLsMmNTFANxVQ99y8mKamfpxV/1lJW5jL/3/lHlNSTfRr\n\tcJS1A8uDnjbfpOEoPL9gNceq65DJ9WZPyeSxzmpRCpMBXkebgo7nfT1jID3x94FhffAEKhtPjNz\n\t3kjTyv09GYf4qjFp4a5DxYkFzOilWVQfWDkhuXFQ1fVyMtEzIIBTb8QaEo7iA4K07fQEV+3aM0Z\n\t9Xnaz1XYpbBMA8/Q/6HTnm3sYMfk6xjvtmwirGYVRxG33pGQ3dYTBgvSc=","X-Received":["by 2002:a05:6000:dca:b0:337:7ac9:7925 with SMTP id\n\tdw10-20020a0560000dca00b003377ac97925mr3157937wrb.24.1705952681184; \n\tMon, 22 Jan 2024 11:44:41 -0800 (PST)","by 2002:a05:6000:dca:b0:337:7ac9:7925 with SMTP id\n\tdw10-20020a0560000dca00b003377ac97925mr3157932wrb.24.1705952680841; \n\tMon, 22 Jan 2024 11:44:40 -0800 (PST)"],"X-Google-Smtp-Source":"AGHT+IFOqm7mgGaIOgdorRhiNR+7VilJv1Bpd0nFcScosfRaNv7YuvmOK7mDB4/DwgkA8BzyKaQ+pA==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Subject":"Re: [PATCH 04/12] libcamera: thread: Ensure deferred deletion of\n\tall objects before stopping","In-Reply-To":"<20240121035948.4226-5-laurent.pinchart@ideasonboard.com>\n\t(Laurent Pinchart's message of \"Sun, 21 Jan 2024 05:59:40 +0200\")","References":"<20240121035948.4226-1-laurent.pinchart@ideasonboard.com>\n\t<20240121035948.4226-5-laurent.pinchart@ideasonboard.com>","Date":"Mon, 22 Jan 2024 20:44:39 +0100","Message-ID":"<87wms16tlk.fsf@redhat.com>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28565,"web_url":"https://patchwork.libcamera.org/comment/28565/","msgid":"<20240122233423.GA3365@pendragon.ideasonboard.com>","date":"2024-01-22T23:34:23","subject":"Re: [PATCH 04/12] libcamera: thread: Ensure deferred deletion of all\n\tobjects before stopping","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Mon, Jan 22, 2024 at 08:44:39PM +0100, Milan Zamazal wrote:\n> Laurent Pinchart <laurent.pinchart@ideasonboard.com> writes:\n> \n> > Objects can be scheduled for deletion with Object::deleteLater(), which\n> > queues a deferred deletion to the thread's event loop. As the\n> > deleteLater() function is meant to be called from a different thread,\n> > this may race with thread termination, and deferred deletions queued\n> > just before calling Thread::exit() may not be processed by the event\n> > loop. Make sure they get processed when finishing the thread, before\n> > stopping.\n> \n> Does this eliminate the race completely or does it just reduce it significantly?\n> This should be mentioned and if a possible race still exists, it would be good\n> to mention the practical benefits of the change (like making tests reliable).\n\nIt eliminates this particular race completely. I'll clarify this with\n\nThis eliminates the race condition that occurs when calling\nObject::deleteLater() followed by Thread::exit() from the same thread.\nCalling deleteLater() from neither the thread the object is bound to or\nthe thread calling Thread::exit() is still inherently racy.\n\n> deleteLater() documentation is not clear (on purpose?) about whether the\n> deletion is guaranteed to be run.  Maybe worth to clarify it there.\n\nI'll improve the Object::deleteLater() documentation as follows:\n\n- * If this function is called before the thread's event loop is started, the\n- * object will be deleted when the event loop starts.\n+ * If this function is called before the thread's event loop is started or\n+ * after it has stopped, the object will be deleted when the event loop\n+ * (re)starts. If this never occurs, the object will be leaked.\n\n> > This fixes a failure in the object-delete unit test.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  src/libcamera/base/thread.cpp | 6 ++++++\n> >  1 file changed, 6 insertions(+)\n> >\n> > diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp\n> > index 75693c92a0b1..4ac72036aa69 100644\n> > --- a/src/libcamera/base/thread.cpp\n> > +++ b/src/libcamera/base/thread.cpp\n> > @@ -371,6 +371,12 @@ void Thread::run()\n> >  \n> >  void Thread::finishThread()\n> >  {\n> > +\t/*\n> > +\t * Objects may have been scheduled for deletion right before the thread\n> > +\t * exited. Ensure they get deleted now, before the thread stops.\n> > +\t */\n> > +\tdispatchMessages(Message::Type::DeferredDelete);\n> > +\n> >  \tdata_->mutex_.lock();\n> >  \tdata_->running_ = false;\n> >  \tdata_->mutex_.unlock();","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 3D39ABDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 22 Jan 2024 23:34:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5AC6D6291F;\n\tTue, 23 Jan 2024 00:34:22 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 458F961D46\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Jan 2024 00:34:20 +0100 (CET)","from pendragon.ideasonboard.com (89-27-53-110.bb.dnainternet.fi\n\t[89.27.53.110])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C44BE541;\n\tTue, 23 Jan 2024 00:33:06 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"gy04HANr\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1705966387;\n\tbh=r9LpscN5pkNd6lhr74ecWGSefDOUTwSh8U3JBzoffAY=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=gy04HANr9pxu1eH4KHkQhXKuI9PrO+5CEi7kLM5eLKhX2Z/pXG2wjmp2fvGuCjYig\n\to9XYM9vqAX4HcaxKRFIuS9Wfshq7KcmyTrzD9CV8CwBa93wa7Kn3hFCY20edLIqmIn\n\tVH4d67gT1mRzbXS+qIMn8Hd7Fa1+URjYXr+3XSSg=","Date":"Tue, 23 Jan 2024 01:34:23 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Milan Zamazal <mzamazal@redhat.com>","Subject":"Re: [PATCH 04/12] libcamera: thread: Ensure deferred deletion of all\n\tobjects before stopping","Message-ID":"<20240122233423.GA3365@pendragon.ideasonboard.com>","References":"<20240121035948.4226-1-laurent.pinchart@ideasonboard.com>\n\t<20240121035948.4226-5-laurent.pinchart@ideasonboard.com>\n\t<87wms16tlk.fsf@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<87wms16tlk.fsf@redhat.com>","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28581,"web_url":"https://patchwork.libcamera.org/comment/28581/","msgid":"<87r0i8b974.fsf@redhat.com>","date":"2024-01-23T11:06:23","subject":"Re: [PATCH 04/12] libcamera: thread: Ensure deferred deletion of\n\tall objects before stopping","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Laurent Pinchart <laurent.pinchart@ideasonboard.com> writes:\n\n> On Mon, Jan 22, 2024 at 08:44:39PM +0100, Milan Zamazal wrote:\n>> Laurent Pinchart <laurent.pinchart@ideasonboard.com> writes:\n>> \n>\n>> > Objects can be scheduled for deletion with Object::deleteLater(), which\n>> > queues a deferred deletion to the thread's event loop. As the\n>> > deleteLater() function is meant to be called from a different thread,\n>> > this may race with thread termination, and deferred deletions queued\n>> > just before calling Thread::exit() may not be processed by the event\n>> > loop. Make sure they get processed when finishing the thread, before\n>> > stopping.\n>> \n>> Does this eliminate the race completely or does it just reduce it significantly?\n>> This should be mentioned and if a possible race still exists, it would be good\n>> to mention the practical benefits of the change (like making tests reliable).\n>\n> It eliminates this particular race completely. I'll clarify this with\n>\n> This eliminates the race condition that occurs when calling\n> Object::deleteLater() followed by Thread::exit() from the same thread.\n> Calling deleteLater() from neither the thread the object is bound to or\n> the thread calling Thread::exit() is still inherently racy.\n>\n>> deleteLater() documentation is not clear (on purpose?) about whether the\n>> deletion is guaranteed to be run.  Maybe worth to clarify it there.\n>\n> I'll improve the Object::deleteLater() documentation as follows:\n>\n> - * If this function is called before the thread's event loop is started, the\n> - * object will be deleted when the event loop starts.\n> + * If this function is called before the thread's event loop is started or\n> + * after it has stopped, the object will be deleted when the event loop\n> + * (re)starts. If this never occurs, the object will be leaked.\n\nThanks, these explanations confirm what I expected and are completely clear now,\nat least to me.\n\n>> > This fixes a failure in the object-delete unit test.\n>> >\n>> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>> > ---\n>> >  src/libcamera/base/thread.cpp | 6 ++++++\n>> >  1 file changed, 6 insertions(+)\n>> >\n>> > diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp\n>> > index 75693c92a0b1..4ac72036aa69 100644\n>> > --- a/src/libcamera/base/thread.cpp\n>> > +++ b/src/libcamera/base/thread.cpp\n>> > @@ -371,6 +371,12 @@ void Thread::run()\n>> >  \n>> >  void Thread::finishThread()\n>> >  {\n>> > +\t/*\n>> > +\t * Objects may have been scheduled for deletion right before the thread\n>> > +\t * exited. Ensure they get deleted now, before the thread stops.\n>> > +\t */\n>> > +\tdispatchMessages(Message::Type::DeferredDelete);\n>> > +\n>> >  \tdata_->mutex_.lock();\n>> >  \tdata_->running_ = false;\n>> >  \tdata_->mutex_.unlock();","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 40F8CC323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 23 Jan 2024 11:06:34 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4489262944;\n\tTue, 23 Jan 2024 12:06:33 +0100 (CET)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 89506628E9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Jan 2024 12:06:32 +0100 (CET)","from mail-wr1-f72.google.com (mail-wr1-f72.google.com\n\t[209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-232-NJXa0u_2Pdy5NMAzM5pDsw-1; Tue, 23 Jan 2024 06:06:27 -0500","by mail-wr1-f72.google.com with SMTP id\n\tffacd0b85a97d-33926c83a2cso1915200f8f.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Jan 2024 03:06:27 -0800 (PST)","from nuthatch (nat-pool-brq-t.redhat.com. [213.175.37.10])\n\tby smtp.gmail.com with ESMTPSA id\n\tbw12-20020a0560001f8c00b00337cef427f8sm13672166wrb.70.2024.01.23.03.06.23\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 23 Jan 2024 03:06:23 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"SR1Sskgs\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1706007991;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=Z23MGfJTmeTTyVtoFDCrBlH3kg7bJIuSVsUROQ//Kbc=;\n\tb=SR1Sskgs0CQp4SO2/gjCrl/XxIXJft688Poa41k7kjuPJjzXN019pTW07wIY6bS6rRyaOE\n\toLazgV9W5TEeB/yLs7nf4cL9qORS75k2C8AlJ7oNJr9qEgxS/iJnhj8u8SUTT+t7YJx2vD\n\tgMVCAwhsHv83WCKikqLzRbhmN8UlLfA=","X-MC-Unique":"NJXa0u_2Pdy5NMAzM5pDsw-1","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1706007985; x=1706612785;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=Z23MGfJTmeTTyVtoFDCrBlH3kg7bJIuSVsUROQ//Kbc=;\n\tb=AfxbqwdwuAZztDo0vO3z5XZ86qTGeY3jg8uw3yp4OesSY9v7IpAlZM/Oxf8rWxS/nR\n\tfnxF712yZdobWoCBDHsxo8XSMqqrx0jjHCqimyB9oi0R7VtH/ve0a9d8EznHxXLsPZvg\n\tc14ZcbNxnuA4o3e7IP/aVP36FJpwfQbKs5Bac9wxzzVEwEWJnlZtMbpRrhJtInN8dgRJ\n\tBW2rOYLXdNSPO+yOsCVtbr8Q87dX40Tk+AX5jfWfFLUYO99GLN5mriNJpxqpxnMxeBBN\n\tlJ8/0tGlb2N3xEqR0HCac5dfGbvyEvhNy+wlf5VFklucWX9/PPpypiu++3+mDZCxjYsB\n\tjKcQ==","X-Gm-Message-State":"AOJu0Yx1A19ad03Smtkav/4gwWK+NpkxQO6v8NwGFb7feu7W9vy9ItCu\n\teP9WT5MIgBNfprdFHIcCXaYEGE4WOoTf2sMRbKmIp1F2HKT4V1+4XJNXkVcbJFekG5/+tzGtEKl\n\tldRGfFFi8Cx7zNuvdAyhyYSLj5J3ppi95Y5r5vv1SdkjmScnn+3E5e7HgeBKgZ7FRh6Y5XdrrfM\n\tuFZlqQ0DTgMdG/Q/y9eI+X+Z53WOjM7A/58ve0biAFfU/uygAlWFTOuic=","X-Received":["by 2002:a5d:43cc:0:b0:337:c030:444a with SMTP id\n\tv12-20020a5d43cc000000b00337c030444amr1357693wrr.272.1706007984898; \n\tTue, 23 Jan 2024 03:06:24 -0800 (PST)","by 2002:a5d:43cc:0:b0:337:c030:444a with SMTP id\n\tv12-20020a5d43cc000000b00337c030444amr1357682wrr.272.1706007984525; \n\tTue, 23 Jan 2024 03:06:24 -0800 (PST)"],"X-Google-Smtp-Source":"AGHT+IHPB7Vs/npCNvQU/OVtSWgBPbSkS0RYCwKFliBt/j2eCmGxBxE4mUiObmyw1tGS91V/BKSI6w==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Subject":"Re: [PATCH 04/12] libcamera: thread: Ensure deferred deletion of\n\tall objects before stopping","In-Reply-To":"<20240122233423.GA3365@pendragon.ideasonboard.com> (Laurent\n\tPinchart's message of \"Tue, 23 Jan 2024 01:34:23 +0200\")","References":"<20240121035948.4226-1-laurent.pinchart@ideasonboard.com>\n\t<20240121035948.4226-5-laurent.pinchart@ideasonboard.com>\n\t<87wms16tlk.fsf@redhat.com>\n\t<20240122233423.GA3365@pendragon.ideasonboard.com>","Date":"Tue, 23 Jan 2024 12:06:23 +0100","Message-ID":"<87r0i8b974.fsf@redhat.com>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]