Patch Detail
Show a patch.
GET /api/patches/11719/?format=api
{ "id": 11719, "url": "https://patchwork.libcamera.org/api/patches/11719/?format=api", "web_url": "https://patchwork.libcamera.org/patch/11719/", "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": "<20210325134231.1400051-12-kieran.bingham@ideasonboard.com>", "date": "2021-03-25T13:42:29", "name": "[libcamera-devel,v3,09/11] libcamera: camera: Assert pipelines complete all requests", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "a7174a33805a2d65016098bdba0fe052e190497b", "submitter": { "id": 4, "url": "https://patchwork.libcamera.org/api/people/4/?format=api", "name": "Kieran Bingham", "email": "kieran.bingham@ideasonboard.com" }, "delegate": { "id": 11, "url": "https://patchwork.libcamera.org/api/users/11/?format=api", "username": "kbingham", "first_name": "Kieran", "last_name": "Bingham", "email": "kieran.bingham@ideasonboard.com" }, "mbox": "https://patchwork.libcamera.org/patch/11719/mbox/", "series": [ { "id": 1832, "url": "https://patchwork.libcamera.org/api/series/1832/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1832", "date": "2021-03-25T13:42:18", "name": "[libcamera-devel,v3,01/11] utils: ipc: proxy: Track IPA with a state machine", "version": 1, "mbox": "https://patchwork.libcamera.org/series/1832/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/11719/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/11719/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 E250CC32E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 25 Mar 2021 13:42:49 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9E99A68D94;\n\tThu, 25 Mar 2021 14:42:49 +0100 (CET)", "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 181C6602D9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 25 Mar 2021 14:42:39 +0100 (CET)", "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 776009E2;\n\tThu, 25 Mar 2021 14:42:38 +0100 (CET)" ], "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=\"FI8Q3kwg\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1616679758;\n\tbh=xdRm2p4suosxsWk6793Kifkf8epaM/MJJjtDVNTULmc=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=FI8Q3kwghS24OKmzJ/N2/USea9KV1CnvMsMu8ixbXHV8qcyK01bnpwq0vylwt7QvR\n\tRXwrgkGRVQzUz2PicTYoxcJpozQI+ficJOOsOz4q+K9aRALQhS1pJRP02Yl8pswMAE\n\tbOtP7qIIoR/I0i2U3KA6Iz4yV8bV3QE2JuXyHD6w=", "From": "Kieran Bingham <kieran.bingham@ideasonboard.com>", "To": "libcamera devel <libcamera-devel@lists.libcamera.org>", "Date": "Thu, 25 Mar 2021 13:42:29 +0000", "Message-Id": "<20210325134231.1400051-12-kieran.bingham@ideasonboard.com>", "X-Mailer": "git-send-email 2.25.1", "In-Reply-To": "<20210325134231.1400051-1-kieran.bingham@ideasonboard.com>", "References": "<20210325134231.1400051-1-kieran.bingham@ideasonboard.com>", "MIME-Version": "1.0", "Subject": "[libcamera-devel] [PATCH v3 09/11] 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---\nNote:\n\nI wanted to make PipelineHandler::active() a const function, but then\nI'm unable to call it through invokeMethod(). Does invokeMethod support\ncalling const functions? Or did I do something obviously wrong?\n---\n include/libcamera/internal/pipeline_handler.h | 1 +\n src/libcamera/camera.cpp | 3 +++\n src/libcamera/pipeline_handler.cpp | 17 +++++++++++++++++\n 3 files changed, 21 insertions(+)", "diff": "diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\nindex 9bdda8f3b799..1410a06ebabe 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);\n \n \tint queueRequest(Request *request);\n \ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 7f7956ba732f..99b01633ff5f 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -1086,6 +1086,9 @@ int Camera::stop()\n \td->pipe_->invokeMethod(&PipelineHandler::stop, ConnectionTypeBlocking,\n \t\t\t this);\n \n+\tASSERT(!d->pipe_->invokeMethod(&PipelineHandler::active,\n+\t\t\t\t ConnectionTypeBlocking, 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 e3d4975d9ffd..c1ea4374b445 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -357,6 +357,23 @@ 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+ * \\context This function is called from the CameraManager thread.\n+ *\n+ * \\return True if there are pending requests, or false otherwise\n+ */\n+bool PipelineHandler::active(const Camera *camera)\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", "v3", "09/11" ] }