Patch Detail
Show a patch.
GET /api/patches/12089/?format=api
{ "id": 12089, "url": "https://patchwork.libcamera.org/api/patches/12089/?format=api", "web_url": "https://patchwork.libcamera.org/patch/12089/", "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": "<20210423040427.1226704-1-hiroh@chromium.org>", "date": "2021-04-23T04:04:27", "name": "[libcamera-devel,RFC] android: CameraWorker: Cancel pending messages in queue in stop()", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "2feedee70d8b52a52f17f1a59e1eb9dfa2943172", "submitter": { "id": 63, "url": "https://patchwork.libcamera.org/api/people/63/?format=api", "name": "Hirokazu Honda", "email": "hiroh@chromium.org" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/12089/mbox/", "series": [ { "id": 1967, "url": "https://patchwork.libcamera.org/api/series/1967/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1967", "date": "2021-04-23T04:04:27", "name": "[libcamera-devel,RFC] android: CameraWorker: Cancel pending messages in queue in stop()", "version": 1, "mbox": "https://patchwork.libcamera.org/series/1967/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/12089/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/12089/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 6E448BDB1A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 23 Apr 2021 04:04:36 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E402E68872;\n\tFri, 23 Apr 2021 06:04:35 +0200 (CEST)", "from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com\n\t[IPv6:2607:f8b0:4864:20::102d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BC03768861\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 23 Apr 2021 06:04:34 +0200 (CEST)", "by mail-pj1-x102d.google.com with SMTP id\n\tm6-20020a17090a8586b02901507e1acf0fso543218pjn.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 22 Apr 2021 21:04:34 -0700 (PDT)", "from hiroh2.tok.corp.google.com\n\t([2401:fa00:8f:2:8537:2d4f:8d35:5777])\n\tby smtp.gmail.com with ESMTPSA id\n\ti22sm3604830pgj.90.2021.04.22.21.04.31\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 22 Apr 2021 21:04:32 -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=\"Gc3V9+Tq\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; h=from:to:cc:subject:date:message-id:mime-version\n\t:content-transfer-encoding;\n\tbh=VHFK4Q8bcE+PiHiCFkfv4rLEEKhtKOVVSjtRsIfzi8E=;\n\tb=Gc3V9+TqlBDENFZyjxVbDp8AgRLFBVo4J2GtxIvDUhunFotk5l36q8rUyDAam+ANFn\n\tyoki0pvlw+K9QZiDSFRImMS1X4wF2weJ8cNgmB2QJRuniA+Jf8KkJLAgm8W6qICVXaTQ\n\tdMZ6MVsQnvXUAHv7zJ2r8fXLbAK0zWeMgxMkg=", "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:mime-version\n\t:content-transfer-encoding;\n\tbh=VHFK4Q8bcE+PiHiCFkfv4rLEEKhtKOVVSjtRsIfzi8E=;\n\tb=U8BnHRRl8zTQc85drLw4L0wPuVFgK4Kpk7YEBlSG4Cb0e4he6FF304AFNhqXRNlU2F\n\tenmP33yf5DUsJZwQHh97Y7A1NdQu6EYLO+D86zSodcOBYSpPxXAAYZfh+3QTiYtsrZtX\n\tCHSxhnp30sUOWnuCz1VhmB9w8NfCnRJq0uOqkTqVadg0VXODGQ++N0whzsfBunmyfmWf\n\tpHuRXeABFU7zvLJlGs3OmzlJXR2cVHrljeR6e+0TWnGizFEq0cM9IwPDM4Epgt745WEV\n\tRryHdAXEUqyvZT3xyZKbdXVofpuS/lSJfJ2KkWODGrMWE1N/noWIpcHTwqa1C9P9Gs/7\n\tWzRg==", "X-Gm-Message-State": "AOAM53285VXQLKII+9EfQB0TDCgPQoRuLZWGZSFMrHSwaRvwAJ7uVSuJ\n\tt5NW/7kPOJvNJoufU/Uhq9W8QmCjSI2ePQ==", "X-Google-Smtp-Source": "ABdhPJx6lF6S9u3HpJ779p22cNPr/tpNn70hbqVKLQgNmYgwtXgmGacslnGZAI8oc2S10cqVCAqTGA==", "X-Received": "by 2002:a17:90b:1b4a:: with SMTP id\n\tnv10mr3646159pjb.75.1619150673178; \n\tThu, 22 Apr 2021 21:04:33 -0700 (PDT)", "From": "Hirokazu Honda <hiroh@chromium.org>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Fri, 23 Apr 2021 13:04:27 +0900", "Message-Id": "<20210423040427.1226704-1-hiroh@chromium.org>", "X-Mailer": "git-send-email 2.31.1.498.g6c1eba8ee3d-goog", "MIME-Version": "1.0", "Subject": "[libcamera-devel] [RFC PATCH] android: CameraWorker: Cancel pending\n\tmessages in queue in stop()", "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": "CameraWorker::stop() executes Thread::exit() and Thread::wait().\nHowever, intuitively, the two functions doesn't clean up pending\nmessages in the message queue of the thread. They are rather\ncleaned in the destruction of CameraWorker, but CameraWorker's\nlife time is the same as CameraDevice and thus CameraManager,\nwhich is never destroyed. On the other hand,\nCamera3RequestDescriptors are destroyed in CameraDevice::stop().\n\nThis causes CameraWorker::Worker::queueRequest() starts to be\nexecuted after CameraWorker::start(), which is after\nCameraDevice::stop(). This obviously causes a segmentation fault,\nbecause CameraWorker::Worker::queueRequest() touches\nCaptureRequest which is owned by Camera3RequestDescriptor.\n\nThis fixes the issue by cancel pending message in thread queue in\nCameraWorker::stop() with Thread::dispatchMessages().\n\nSigned-off-by: Hirokazu Honda <hiroh@chromium.org>\n---\n src/android/camera_worker.cpp | 1 +\n 1 file changed, 1 insertion(+)", "diff": "diff --git a/src/android/camera_worker.cpp b/src/android/camera_worker.cpp\nindex 300ddde0..b68ce9d5 100644\n--- a/src/android/camera_worker.cpp\n+++ b/src/android/camera_worker.cpp\n@@ -62,6 +62,7 @@ void CameraWorker::start()\n \n void CameraWorker::stop()\n {\n+\tthread_.dispatchMessages(Message::Type::InvokeMessage);\n \tthread_.exit();\n \tthread_.wait();\n }\n", "prefixes": [ "libcamera-devel", "RFC" ] }