Show a patch.

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

{
    "id": 12011,
    "url": "https://patchwork.libcamera.org/api/patches/12011/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/12011/",
    "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": "<20210420130741.236848-2-kieran.bingham@ideasonboard.com>",
    "date": "2021-04-20T13:07:36",
    "name": "[libcamera-devel,v4,1/6] libcamera: camera: Assert pipelines complete all requests",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "e02f13b60757935110b5eed469de9cf3b9121375",
    "submitter": {
        "id": 4,
        "url": "https://patchwork.libcamera.org/api/people/4/?format=api",
        "name": "Kieran Bingham",
        "email": "kieran.bingham@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/12011/mbox/",
    "series": [
        {
            "id": 1952,
            "url": "https://patchwork.libcamera.org/api/series/1952/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1952",
            "date": "2021-04-20T13:07:35",
            "name": "IPU3 Debug Improvements",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/1952/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/12011/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/12011/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 B0BDBBDB16\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 20 Apr 2021 13:07:50 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6B0AC68843;\n\tTue, 20 Apr 2021 15:07:49 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4B8876883E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 20 Apr 2021 15:07:46 +0200 (CEST)",
            "from Q.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net\n\t[86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C1E5B470;\n\tTue, 20 Apr 2021 15:07:45 +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=\"C/ETQ+cy\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1618924065;\n\tbh=+2o1SbY9ZQUOfiOw1TMHvbg9ZFiOYLTvuH7NHSfrssU=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=C/ETQ+cyMMQmqcmIEZIaIpteVAijMdIY5D4w48wUiHAS5fQkBWtcZSRnCVGD37pzR\n\ticxwWw82deZs5JNic6QbmbvZ0tbHWiFsumyJSMC4vBdzjjQg0RORhcAj2J6JKF/9rT\n\tEkdH2f9mRVhcA7CuI9OM7L87UUEe1cYzaBMaRGBM=",
        "From": "Kieran Bingham <kieran.bingham@ideasonboard.com>",
        "To": "libcamera devel <libcamera-devel@lists.libcamera.org>",
        "Date": "Tue, 20 Apr 2021 14:07:36 +0100",
        "Message-Id": "<20210420130741.236848-2-kieran.bingham@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20210420130741.236848-1-kieran.bingham@ideasonboard.com>",
        "References": "<20210420130741.236848-1-kieran.bingham@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v4 1/6] libcamera: camera: Assert\n\tpipelines complete all requests",
        "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>",
        "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>"
    },
    "content": "When the camera manager calls stop on a pipeline, it is expected that\nthe pipeline handler guarantees all requests are returned back to the\napplication before the camera has stopped.\n\nEnsure that this guarantee is met by providing an accessor on the\npipeline handler to validate that all pending requests are removed.\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n include/libcamera/internal/pipeline_handler.h |  1 +\n src/libcamera/camera.cpp                      |  2 ++\n src/libcamera/pipeline_handler.cpp            | 15 +++++++++++++++\n 3 files changed, 18 insertions(+)",
    "diff": "diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\nindex c6454db6b2c4..27d45d8ffc20 100644\n--- a/include/libcamera/internal/pipeline_handler.h\n+++ b/include/libcamera/internal/pipeline_handler.h\n@@ -80,6 +80,7 @@ public:\n \n \tvirtual int start(Camera *camera, const ControlList *controls) = 0;\n \tvirtual void stop(Camera *camera) = 0;\n+\tbool active(const Camera *camera) const;\n \n \tvoid queueRequest(Request *request);\n \ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 763f3b9926fd..c3fc3dd91bd6 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -1084,6 +1084,8 @@ int Camera::stop()\n \td->pipe_->invokeMethod(&PipelineHandler::stop, ConnectionTypeBlocking,\n \t\t\t       this);\n \n+\tASSERT(!d->pipe_->active(this));\n+\n \td->setState(Private::CameraConfigured);\n \n \treturn 0;\ndiff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\nindex 3b3150bdbbf7..8629e3578f02 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -368,6 +368,21 @@ const ControlList &PipelineHandler::properties(const Camera *camera) const\n  * \\context This function is called from the CameraManager thread.\n  */\n \n+/**\n+ * \\brief Determine if the camera has any requests pending\n+ * \\param[in] camera The camera to check\n+ *\n+ * This method determines if there are any requests queued to the pipeline\n+ * awaiting processing.\n+ *\n+ * \\return True if there are pending requests, or false otherwise\n+ */\n+bool PipelineHandler::active(const Camera *camera) const\n+{\n+\tconst CameraData *data = cameraData(camera);\n+\treturn !data->queuedRequests_.empty();\n+}\n+\n /**\n  * \\fn PipelineHandler::queueRequest()\n  * \\brief Queue a request\n",
    "prefixes": [
        "libcamera-devel",
        "v4",
        "1/6"
    ]
}