Show a patch.

GET /api/patches/22861/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 22861,
    "url": "https://patchwork.libcamera.org/api/patches/22861/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/22861/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20250225150614.20195-6-mzamazal@redhat.com>",
    "date": "2025-02-25T15:06:11",
    "name": "[v3,5/6] libcamera: software_isp: Dispatch messages on stop",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "bb05fe9b2edc180017fc9c20f06ca39b945fff80",
    "submitter": {
        "id": 177,
        "url": "https://patchwork.libcamera.org/api/people/177/?format=api",
        "name": "Milan Zamazal",
        "email": "mzamazal@redhat.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/22861/mbox/",
    "series": [
        {
            "id": 5019,
            "url": "https://patchwork.libcamera.org/api/series/5019/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5019",
            "date": "2025-02-25T15:06:06",
            "name": "Fix occasional software ISP assertion error on stop",
            "version": 3,
            "mbox": "https://patchwork.libcamera.org/series/5019/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/22861/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/22861/checks/",
    "tags": {},
    "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 66238BDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 25 Feb 2025 15:06:46 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 05F856872D;\n\tTue, 25 Feb 2025 16:06:46 +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 A76F16872D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 25 Feb 2025 16:06:42 +0100 (CET)",
            "from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-463-24YRpOz7MfaABwi4n_ZGjw-1;\n\tTue, 25 Feb 2025 10:06:37 -0500",
            "from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.93])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 3F5611800991; Tue, 25 Feb 2025 15:06:36 +0000 (UTC)",
            "from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.45.224.119])\n\tby mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 043951800357; Tue, 25 Feb 2025 15:06:33 +0000 (UTC)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"VhiclidK\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1740496001;\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\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=svRziI/jFrWfj/h9faDPv+X9EhT3RxsW9byRArjFhWg=;\n\tb=VhiclidKV5wBe5qQygfN+aQ9sNON2bTkL9mCXbp0VFScDNdkHFwK7ZnU8BPLhVz0Rp1v7c\n\tnrs9X1yQs7MZ4h/DxvT88omfFtwm60Tpdpuqvnj23GL15szLXobF5vjgOkz2xKT5ZUoQFg\n\t70HsDG/9YEgVB9YXuWm2L021vZtFOzM=",
        "X-MC-Unique": "24YRpOz7MfaABwi4n_ZGjw-1",
        "X-Mimecast-MFC-AGG-ID": "24YRpOz7MfaABwi4n_ZGjw_1740495996",
        "From": "Milan Zamazal <mzamazal@redhat.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Milan Zamazal <mzamazal@redhat.com>,\n\tStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>",
        "Subject": "[PATCH v3 5/6] libcamera: software_isp: Dispatch messages on stop",
        "Date": "Tue, 25 Feb 2025 16:06:11 +0100",
        "Message-ID": "<20250225150614.20195-6-mzamazal@redhat.com>",
        "In-Reply-To": "<20250225150614.20195-1-mzamazal@redhat.com>",
        "References": "<20250225150614.20195-1-mzamazal@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.93",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "fLhudNVdyesoC5pVTKbhYA5t7Xho2zDn-E-c3Yqyj9Q_1740495996",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "content-type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "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>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "There may be pending messages in SoftwareIsp message queue when\nSoftwareIsp stops.  The call to IPAProxySoft::stop() will dispatch them\nbefore SoftwareIsp::stop() finishes.  But this is dependent on\nIPAProxySoft::stop() implementation, let's break this dependency and\ndispatch messages to SoftwareIsp explicitly in SoftwareIsp::stop().\n\nThis also allows dropping `running_' flag.  Since the SoftwareIsp\nmessages get processed and invoke IPA calls before the IPA proxy is set\nto ProxyStopping state and the SoftwareIsp worker thread is no longer\nrunning, it's guaranteed that no new messages come to SoftwareIsp and\nattempt to call the stopped IPA proxy.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n .../internal/software_isp/software_isp.h      |  1 -\n src/libcamera/software_isp/software_isp.cpp   | 24 ++++++++-----------\n 2 files changed, 10 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex 400a4dc5..133b545c 100644\n--- a/include/libcamera/internal/software_isp/software_isp.h\n+++ b/include/libcamera/internal/software_isp/software_isp.h\n@@ -101,7 +101,6 @@ private:\n \tDmaBufAllocator dmaHeap_;\n \n \tstd::unique_ptr<ipa::soft::IPAProxySoft> ipa_;\n-\tbool running_;\n \tstd::deque<FrameBuffer *> queuedInputBuffers_;\n \tstd::deque<FrameBuffer *> queuedOutputBuffers_;\n };\ndiff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex beac66fc..193713b9 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -14,6 +14,7 @@\n #include <unistd.h>\n \n #include <libcamera/base/log.h>\n+#include <libcamera/base/thread.h>\n \n #include <libcamera/controls.h>\n #include <libcamera/formats.h>\n@@ -323,7 +324,6 @@ int SoftwareIsp::start()\n \tint ret = ipa_->start();\n \tif (ret)\n \t\treturn ret;\n-\trunning_ = true;\n \n \tispWorkerThread_.start();\n \treturn 0;\n@@ -340,7 +340,8 @@ void SoftwareIsp::stop()\n \tispWorkerThread_.exit();\n \tispWorkerThread_.wait();\n \n-\trunning_ = false;\n+\tThread::current()->dispatchMessages(Message::Type::InvokeMessage, this);\n+\n \tipa_->stop();\n \n \tfor (auto buffer : queuedOutputBuffers_) {\n@@ -383,26 +384,21 @@ void SoftwareIsp::setSensorCtrls(const ControlList &sensorControls)\n \n void SoftwareIsp::statsReady(uint32_t frame, uint32_t bufferId)\n {\n-\tif (running_)\n-\t\tispStatsReady.emit(frame, bufferId);\n+\tispStatsReady.emit(frame, bufferId);\n }\n \n void SoftwareIsp::inputReady(FrameBuffer *input)\n {\n-\tif (running_) {\n-\t\tASSERT(queuedInputBuffers_.front() == input);\n-\t\tqueuedInputBuffers_.pop_front();\n-\t\tinputBufferReady.emit(input);\n-\t}\n+\tASSERT(queuedInputBuffers_.front() == input);\n+\tqueuedInputBuffers_.pop_front();\n+\tinputBufferReady.emit(input);\n }\n \n void SoftwareIsp::outputReady(FrameBuffer *output)\n {\n-\tif (running_) {\n-\t\tASSERT(queuedOutputBuffers_.front() == output);\n-\t\tqueuedOutputBuffers_.pop_front();\n-\t\toutputBufferReady.emit(output);\n-\t}\n+\tASSERT(queuedOutputBuffers_.front() == output);\n+\tqueuedOutputBuffers_.pop_front();\n+\toutputBufferReady.emit(output);\n }\n \n } /* namespace libcamera */\n",
    "prefixes": [
        "v3",
        "5/6"
    ]
}