Show a patch.

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

{
    "id": 1176,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/1176/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/1176/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/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": "<20190508151831.12274-12-niklas.soderlund@ragnatech.se>",
    "date": "2019-05-08T15:18:31",
    "name": "[libcamera-devel,v2,11/11] libcamera: camera: Lock the pipeline handler in acquire()",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "54d3733de70a5e1b5a6ad3bd04a4fbec4a71248a",
    "submitter": {
        "id": 5,
        "url": "https://patchwork.libcamera.org/api/1.1/people/5/?format=api",
        "name": "Niklas Söderlund",
        "email": "niklas.soderlund@ragnatech.se"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/1176/mbox/",
    "series": [
        {
            "id": 300,
            "url": "https://patchwork.libcamera.org/api/1.1/series/300/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=300",
            "date": "2019-05-08T15:18:20",
            "name": "libcamerea: Add support for exclusive access to cameras between processes",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/300/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/1176/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/1176/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 DB85F60E6C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 May 2019 17:18:59 +0200 (CEST)",
            "from localhost.localdomain (unknown [79.138.136.66])\n\tby bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA\n\tid 9931c71b-71a4-11e9-8fa2-005056917a89;\n\tWed, 08 May 2019 17:18:57 +0200 (CEST)"
        ],
        "X-Halon-ID": "9931c71b-71a4-11e9-8fa2-005056917a89",
        "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": "Wed,  8 May 2019 17:18:31 +0200",
        "Message-Id": "<20190508151831.12274-12-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20190508151831.12274-1-niklas.soderlund@ragnatech.se>",
        "References": "<20190508151831.12274-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v2 11/11] libcamera: camera: Lock the\n\tpipeline handler 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": "Wed, 08 May 2019 15:19:00 -0000"
    },
    "content": "To allow more than 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\nneed to be tied to the same process.\n\nAllow for this by locking the whole pipeline when one of its cameras\nis acquired by the user. Other processes can still enumerate and list\nall cameras in the system but can't acquire a camera from a locked\npipeline handler.\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 cb45bafe3fb1ff85..b7c9b80de409baf3 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -489,6 +489,11 @@ int Camera::acquire()\n \tif (!stateIs(CameraAvailable))\n \t\treturn -EBUSY;\n \n+\tif (!pipe_->lock()) {\n+\t\tLOG(Camera, Info) << \"Pipeline handler in use by other process\";\n+\t\treturn -EBUSY;\n+\t}\n+\n \tstate_ = CameraAcquired;\n \n \treturn 0;\n@@ -510,6 +515,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",
        "v2",
        "11/11"
    ]
}