Patch Detail
Show a patch.
GET /api/patches/12246/?format=api
{ "id": 12246, "url": "https://patchwork.libcamera.org/api/patches/12246/?format=api", "web_url": "https://patchwork.libcamera.org/patch/12246/", "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": "<20210510105235.28319-7-jacopo@jmondi.org>", "date": "2021-05-10T10:52:33", "name": "[libcamera-devel,6/8] android: Guard access to the camera state", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "b97bc15bfdcbd63d966355fd2e8f3e43044ba13e", "submitter": { "id": 3, "url": "https://patchwork.libcamera.org/api/people/3/?format=api", "name": "Jacopo Mondi", "email": "jacopo@jmondi.org" }, "delegate": { "id": 15, "url": "https://patchwork.libcamera.org/api/users/15/?format=api", "username": "jmondi", "first_name": "Jacopo", "last_name": "Mondi", "email": "jacopo@jmondi.org" }, "mbox": "https://patchwork.libcamera.org/patch/12246/mbox/", "series": [ { "id": 2016, "url": "https://patchwork.libcamera.org/api/series/2016/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2016", "date": "2021-05-10T10:52:27", "name": "android: Implement flush() camera operation", "version": 1, "mbox": "https://patchwork.libcamera.org/series/2016/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/12246/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/12246/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 E9EDCBF831\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 10 May 2021 10:52:03 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A495868923;\n\tMon, 10 May 2021 12:52:03 +0200 (CEST)", "from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net\n\t[217.70.183.196])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id F15CC602BE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 10 May 2021 12:52:00 +0200 (CEST)", "from uno.homenet.telecomitalia.it\n\t(host-82-59-136-116.retail.telecomitalia.it [82.59.136.116])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 43573E002B;\n\tMon, 10 May 2021 10:52:00 +0000 (UTC)" ], "X-Originating-IP": "82.59.136.116", "From": "Jacopo Mondi <jacopo@jmondi.org>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Mon, 10 May 2021 12:52:33 +0200", "Message-Id": "<20210510105235.28319-7-jacopo@jmondi.org>", "X-Mailer": "git-send-email 2.31.1", "In-Reply-To": "<20210510105235.28319-1-jacopo@jmondi.org>", "References": "<20210510105235.28319-1-jacopo@jmondi.org>", "MIME-Version": "1.0", "Subject": "[libcamera-devel] [PATCH 6/8] android: Guard access to the camera\n\tstate", "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": "Guard access to the camera state and the start/stop sequences\nwith a mutex.\n\nCurrently only stop() and the first call to processCaptureRequest()\nstart and stop the camera, and they're not meant to race with each\nother. With the introduction of flush() the camera can be stopped\nconcurrently to a processCaptureRequest() call, hence access to the\ncamera state will need to be protected.\n\nPrepare for that by guarding the existing paths with a mutex.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/android/camera_device.cpp | 23 ++++++++++++++---------\n src/android/camera_device.h | 1 +\n 2 files changed, 15 insertions(+), 9 deletions(-)", "diff": "diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex ff965a1c8c86..14a3f79a7402 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -758,6 +758,7 @@ void CameraDevice::close()\n \n void CameraDevice::stop()\n {\n+\tMutexLocker cameraLock(cameraMutex_);\n \tif (state_ == CameraStopped)\n \t\treturn;\n \n@@ -1913,17 +1914,21 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n \tif (!isValidRequest(camera3Request))\n \t\treturn -EINVAL;\n \n-\t/* Start the camera if that's the first request we handle. */\n-\tif (state_ == CameraStopped) {\n-\t\tworker_.start();\n+\t{\n+\t\tMutexLocker cameraLock(cameraMutex_);\n \n-\t\tint ret = camera_->start();\n-\t\tif (ret) {\n-\t\t\tLOG(HAL, Error) << \"Failed to start camera\";\n-\t\t\treturn ret;\n-\t\t}\n+\t\t/* Start the camera if that's the first request we handle. */\n+\t\tif (state_ == CameraStopped) {\n+\t\t\tworker_.start();\n \n-\t\tstate_ = CameraRunning;\n+\t\t\tint ret = camera_->start();\n+\t\t\tif (ret) {\n+\t\t\t\tLOG(HAL, Error) << \"Failed to start camera\";\n+\t\t\t\treturn ret;\n+\t\t\t}\n+\n+\t\t\tstate_ = CameraRunning;\n+\t\t}\n \t}\n \n \t/*\ndiff --git a/src/android/camera_device.h b/src/android/camera_device.h\nindex 30b364decaab..f263fdae472a 100644\n--- a/src/android/camera_device.h\n+++ b/src/android/camera_device.h\n@@ -120,6 +120,7 @@ private:\n \n \tCameraWorker worker_;\n \n+\tlibcamera::Mutex cameraMutex_; /* Protects access to the camera state. */\n \tState state_;\n \n \tstd::shared_ptr<libcamera::Camera> camera_;\n", "prefixes": [ "libcamera-devel", "6/8" ] }