{"id":12354,"url":"https://patchwork.libcamera.org/api/patches/12354/?format=json","web_url":"https://patchwork.libcamera.org/patch/12354/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210521154227.60186-4-jacopo@jmondi.org>","date":"2021-05-21T15:42:22","name":"[libcamera-devel,v3,3/8] libcamera: pipeline_handler: Cancel Request on queueing failure","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"6c7687760c373d8d7302c4c1962313f7d36a3ce1","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/?format=json","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/12354/mbox/","series":[{"id":2045,"url":"https://patchwork.libcamera.org/api/series/2045/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2045","date":"2021-05-21T15:42:19","name":"Implement flush() camera operation","version":3,"mbox":"https://patchwork.libcamera.org/series/2045/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12354/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12354/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 D6BF5C31FF\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 21 May 2021 15:41:52 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B9E7D6892B;\n\tFri, 21 May 2021 17:41:51 +0200 (CEST)","from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[217.70.183.201])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4E4AB6891B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 21 May 2021 17:41:48 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay8-d.mail.gandi.net (Postfix) with ESMTPSA id DFD081BF214;\n\tFri, 21 May 2021 15:41:47 +0000 (UTC)"],"From":"Jacopo Mondi <jacopo@jmondi.org>","To":"libcamera-devel@lists.libcamera.org","Date":"Fri, 21 May 2021 17:42:22 +0200","Message-Id":"<20210521154227.60186-4-jacopo@jmondi.org>","X-Mailer":"git-send-email 2.31.1","In-Reply-To":"<20210521154227.60186-1-jacopo@jmondi.org>","References":"<20210521154227.60186-1-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v3 3/8] libcamera: pipeline_handler:\n\tCancel Request on queueing failure","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":"Capture requests are queued by the PipelineHandler base class to each\npipeline handler implementation using the virtual queueRequestDevice()\nfunction.\n\nHowever, if the pipeline handler fails to queue the request to the\nhardware, the request gets silently deleted from the list of queued\nones, without notifying application of the error.\n\nReporting to applications that a Request has failed to queue by\ncancelling and then completing it allows applications to maintain their\nrequest-tracking mechanism consistent with the one internal to the library.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/libcamera/pipeline_handler.cpp | 8 ++++++--\n 1 file changed, 6 insertions(+), 2 deletions(-)","diff":"diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\nindex f41b7a7b3308..e507a8bba8a6 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -391,6 +391,8 @@ bool PipelineHandler::hasPendingRequests(const Camera *camera) const\n  * This method queues a capture request to the pipeline handler for processing.\n  * The request is first added to the internal list of queued requests, and\n  * then passed to the pipeline handler with a call to queueRequestDevice().\n+ * If the pipeline handler fails in queuing the request to the hardware the\n+ * request is cancelled.\n  *\n  * Keeping track of queued requests ensures automatic completion of all requests\n  * when the pipeline handler is stopped with stop(). Request completion shall be\n@@ -409,8 +411,10 @@ void PipelineHandler::queueRequest(Request *request)\n \trequest->sequence_ = data->requestSequence_++;\n \n \tint ret = queueRequestDevice(camera, request);\n-\tif (ret)\n-\t\tdata->queuedRequests_.remove(request);\n+\tif (ret) {\n+\t\trequest->cancel();\n+\t\tcompleteRequest(request);\n+\t}\n }\n \n /**\n","prefixes":["libcamera-devel","v3","3/8"]}