Show a patch.

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

{
    "id": 12388,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/12388/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/12388/",
    "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": "<20210524115640.2334778-3-hiroh@chromium.org>",
    "date": "2021-05-24T11:56:40",
    "name": "[libcamera-devel,RFC,2/2] android: CameraHalManager: Create a static object dynamically",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "9675fd663aa2a77cbcb4d342f05b218a110b5a16",
    "submitter": {
        "id": 63,
        "url": "https://patchwork.libcamera.org/api/1.1/people/63/?format=api",
        "name": "Hirokazu Honda",
        "email": "hiroh@chromium.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/12388/mbox/",
    "series": [
        {
            "id": 2055,
            "url": "https://patchwork.libcamera.org/api/1.1/series/2055/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2055",
            "date": "2021-05-24T11:56:38",
            "name": "Fix SIGSEGV in ChromeOS camera3 test",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/2055/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/12388/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/12388/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 D0564C3201\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 May 2021 11:56:52 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8EFC368919;\n\tMon, 24 May 2021 13:56:52 +0200 (CEST)",
            "from mail-pj1-x1034.google.com (mail-pj1-x1034.google.com\n\t[IPv6:2607:f8b0:4864:20::1034])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6596668923\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 13:56:50 +0200 (CEST)",
            "by mail-pj1-x1034.google.com with SMTP id\n\tgb21-20020a17090b0615b029015d1a863a91so11113156pjb.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 04:56:50 -0700 (PDT)",
            "from hiroh2.tok.corp.google.com\n\t([2401:fa00:8f:2:7208:465c:c4e:2dc3])\n\tby smtp.gmail.com with ESMTPSA id\n\tt19sm11149980pfg.70.2021.05.24.04.56.47\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 24 May 2021 04:56:48 -0700 (PDT)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"ClDA3GBt\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=from:to:cc:subject:date:message-id:in-reply-to:references\n\t:mime-version:content-transfer-encoding;\n\tbh=0s2Nd4Ix/jMmEzfVpR+RpQh2atUP4LM4KsrXuCpddx4=;\n\tb=ClDA3GBt6uY5U8J8Y4z7uLJ0Pbq41rWHtNQfD0JygsS8+ECc+SqB7J6hvt4kyX+iEu\n\ts1fLTW4eBNP+HynyNH8vfpPQitvSqK038LEbNG1T1jszpjTF9hKr7eXi0+Gwc7EmlkAO\n\twWrHKE5udmlC/ZcBZ6si+9HqfFriOsEUC689I=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:mime-version:content-transfer-encoding;\n\tbh=0s2Nd4Ix/jMmEzfVpR+RpQh2atUP4LM4KsrXuCpddx4=;\n\tb=AKf2CiLXtWyysPXHggWR29vGKJrNr/USd7hzbhw05UwSQdc6bryPDTnEw+kVaLUZXh\n\t0sTQYyK1AU2dEDRGWvVP4OgNPE1gLFPyTRH3v0o8OEkDEoPtJE3LTv0n5OWULNv/fXTe\n\txgca7+IUs9aQ1NdsT+D5tlL75llNNAKa+5oOadTmpAwvWWbPudSRTW4mY0uWb5tNiLoS\n\tJpQlm0qIQHvAN0SDHH7GD1+biDTCEIgFKWfZIGKVKQuZvpPD+qkfp7msGEL0OASLGzxa\n\tlA43x4NE4oKOea5pcmq1qDiQL7fIOsENgMUb1XL3A9PKnhxYbMutSEvM63qX4Ybt6Yv2\n\tmZTw==",
        "X-Gm-Message-State": "AOAM531LVAncMI1x/yGSgmvHS3W+UBY8JiI5uG4Hh19P/L/c9jZybdsc\n\tnLBOe4UH7ZmdSWdai+IXdWCfzrfKMcB8rA==",
        "X-Google-Smtp-Source": "ABdhPJyhSTCw6V8erjvA5ciEXQys7IFBbEe5qAKXDKpVxr051RN1LX/6qjwgE0jjrnFPhwufcHxgjA==",
        "X-Received": "by 2002:a17:90b:3b92:: with SMTP id\n\tpc18mr24335478pjb.218.1621857408594; \n\tMon, 24 May 2021 04:56:48 -0700 (PDT)",
        "From": "Hirokazu Honda <hiroh@chromium.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Mon, 24 May 2021 20:56:40 +0900",
        "Message-Id": "<20210524115640.2334778-3-hiroh@chromium.org>",
        "X-Mailer": "git-send-email 2.31.1.818.g46aad6cb9e-goog",
        "In-Reply-To": "<20210524115640.2334778-1-hiroh@chromium.org>",
        "References": "<20210524115640.2334778-1-hiroh@chromium.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH RFC 2/2] android: CameraHalManager: Create\n\ta static object dynamically",
        "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>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Originally CameraHalManager is created in the libcamera start up\nand destroyed in the libcamera termination. However,\nCameraHalManager destructor can access  other static objects that\nhas been destroyed.\nAvoid this issue by destroying CameraHalManager when tear_down() is\ncalled in ChromeOS or leaking it in other platforms.\n\nSigned-off-by: Hirokazu Honda <hiroh@chromium.org>\n---\n src/android/camera3_hal.cpp        | 14 +++++++-------\n src/android/camera_hal_manager.cpp |  7 +++++++\n src/android/camera_hal_manager.h   |  5 ++++-\n 3 files changed, 18 insertions(+), 8 deletions(-)",
    "diff": "diff --git a/src/android/camera3_hal.cpp b/src/android/camera3_hal.cpp\nindex f2d4799f..59d51ed5 100644\n--- a/src/android/camera3_hal.cpp\n+++ b/src/android/camera3_hal.cpp\n@@ -24,25 +24,23 @@ using namespace libcamera;\n \n LOG_DEFINE_CATEGORY(HAL)\n \n-static CameraHalManager cameraManager;\n-\n /*------------------------------------------------------------------------------\n  * Android Camera HAL callbacks\n  */\n \n static int hal_get_number_of_cameras()\n {\n-\treturn cameraManager.numCameras();\n+\treturn CameraHalManager::instance()->numCameras();\n }\n \n static int hal_get_camera_info(int id, struct camera_info *info)\n {\n-\treturn cameraManager.getCameraInfo(id, info);\n+\treturn CameraHalManager::instance()->getCameraInfo(id, info);\n }\n \n static int hal_set_callbacks(const camera_module_callbacks_t *callbacks)\n {\n-\tcameraManager.setCallbacks(callbacks);\n+\tCameraHalManager::instance()->setCallbacks(callbacks);\n \n \treturn 0;\n }\n@@ -70,7 +68,7 @@ static int hal_init()\n {\n \tLOG(HAL, Info) << \"Initialising Android camera HAL\";\n \n-\tcameraManager.init();\n+\tCameraHalManager::instance()->init();\n \n \treturn 0;\n }\n@@ -85,7 +83,8 @@ static int hal_dev_open(const hw_module_t *module, const char *name,\n \tLOG(HAL, Debug) << \"Open camera \" << name;\n \n \tint id = atoi(name);\n-\tauto [camera, ret] = cameraManager.open(id, module);\n+\n+\tauto [camera, ret] = CameraHalManager::instance()->open(id, module);\n \tif (!camera) {\n \t\tLOG(HAL, Error)\n \t\t\t<< \"Failed to open camera module '\" << id << \"'\";\n@@ -135,6 +134,7 @@ static void set_up(cros::CameraMojoChannelManagerToken *token)\n \n static void tear_down()\n {\n+\tdelete CameraHalManager::instance();\n }\n \n cros::cros_camera_hal_t CROS_CAMERA_EXPORT CROS_CAMERA_HAL_INFO_SYM = {\ndiff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp\nindex bf3fcda7..387b600d 100644\n--- a/src/android/camera_hal_manager.cpp\n+++ b/src/android/camera_hal_manager.cpp\n@@ -37,6 +37,13 @@ CameraHalManager::CameraHalManager()\n /* CameraManager calls stop() in the destructor. */\n CameraHalManager::~CameraHalManager() = default;\n \n+/* static */\n+CameraHalManager *CameraHalManager::instance()\n+{\n+\tstatic CameraHalManager *cameraHalManager = new CameraHalManager;\n+\treturn cameraHalManager;\n+}\n+\n int CameraHalManager::init()\n {\n \tcameraManager_ = std::make_unique<CameraManager>();\ndiff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h\nindex d9bf2798..9b43afc4 100644\n--- a/src/android/camera_hal_manager.h\n+++ b/src/android/camera_hal_manager.h\n@@ -24,9 +24,10 @@ class CameraDevice;\n class CameraHalManager\n {\n public:\n-\tCameraHalManager();\n \t~CameraHalManager();\n \n+\tstatic CameraHalManager *instance();\n+\n \tint init();\n \n \tstd::tuple<CameraDevice *, int>\n@@ -42,6 +43,8 @@ private:\n \n \tstatic constexpr unsigned int firstExternalCameraId_ = 1000;\n \n+\tCameraHalManager();\n+\n \tstatic int32_t cameraLocation(const libcamera::Camera *cam);\n \n \tvoid cameraAdded(std::shared_ptr<libcamera::Camera> cam);\n",
    "prefixes": [
        "libcamera-devel",
        "RFC",
        "2/2"
    ]
}