Patch Detail
Show a patch.
GET /api/patches/980/?format=api
{ "id": 980, "url": "https://patchwork.libcamera.org/api/patches/980/?format=api", "web_url": "https://patchwork.libcamera.org/patch/980/", "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": "<20190414013506.10515-12-niklas.soderlund@ragnatech.se>", "date": "2019-04-14T01:35:06", "name": "[libcamera-devel,RFC,11/11] libcamera: camera: Lock the pipeline handler in acquire()", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "a8361a52f0b7b9216315ef76fbdbd8a1b16d8fa0", "submitter": { "id": 5, "url": "https://patchwork.libcamera.org/api/people/5/?format=api", "name": "Niklas Söderlund", "email": "niklas.soderlund@ragnatech.se" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/980/mbox/", "series": [ { "id": 249, "url": "https://patchwork.libcamera.org/api/series/249/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=249", "date": "2019-04-14T01:34:55", "name": "libcamerea: Add support for exclusive access to cameras between processes", "version": 1, "mbox": "https://patchwork.libcamera.org/series/249/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/980/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/980/checks/", "tags": {}, "headers": { "Return-Path": "<niklas.soderlund@ragnatech.se>", "Received": [ "from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net\n\t[195.74.38.227])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0DE6B60DCA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 14 Apr 2019 03:35:21 +0200 (CEST)", "from bismarck.berto.se (unknown [89.233.230.99])\n\tby bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA\n\tid 907b0a98-5e55-11e9-8e2c-005056917f90;\n\tSun, 14 Apr 2019 03:35:20 +0200 (CEST)" ], "X-Halon-ID": "907b0a98-5e55-11e9-8e2c-005056917f90", "Authorized-sender": "niklas@soderlund.pp.se", "From": "=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Sun, 14 Apr 2019 03:35:06 +0200", "Message-Id": "<20190414013506.10515-12-niklas.soderlund@ragnatech.se>", "X-Mailer": "git-send-email 2.21.0", "In-Reply-To": "<20190414013506.10515-1-niklas.soderlund@ragnatech.se>", "References": "<20190414013506.10515-1-niklas.soderlund@ragnatech.se>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [RFC 11/11] libcamera: camera: Lock the pipeline\n\thandler in acquire()", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.23", "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>", "X-List-Received-Date": "Sun, 14 Apr 2019 01:35:21 -0000" }, "content": "To allow more then one application using libcamera simultaneously there\ncan be no overlap between which cameras are in use by which user. As a\ncamera is part of a pipeline handler and there might be shared resources\nbetween all cameras exposed by that pipeline handler it's not enough to\nto only lock access to a single camera, all cameras from that pipeline\nneeds to be tied to the same process.\n\nAllow for this by locking the whole pipeline when one of it's cameras\nare acquired by the user. Other processes can still enumerate and list\nall cameras in the system but cant progress a camera in a locked\npipeline handler to the Acquired state.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n src/libcamera/camera.cpp | 7 +++++++\n 1 file changed, 7 insertions(+)", "diff": "diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex bdf14b31d8eeba9c..b3860952efa6446f 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -495,6 +495,11 @@ int Camera::acquire()\n \tif (!stateIs(CameraAvailable))\n \t\treturn -EBUSY;\n \n+\tif (!pipe_->lock()) {\n+\t\tLOG(Camera, Info) << \"Camera in use by other process\";\n+\t\treturn -EBUSY;\n+\t}\n+\n \tstate_ = CameraAcquired;\n \n \treturn 0;\n@@ -516,6 +521,8 @@ int Camera::release()\n \tif (!stateBetween(CameraAvailable, CameraConfigured))\n \t\treturn -EBUSY;\n \n+\tpipe_->unlock();\n+\n \tstate_ = CameraAvailable;\n \n \treturn 0;\n", "prefixes": [ "libcamera-devel", "RFC", "11/11" ] }