[{"id":31806,"web_url":"https://patchwork.libcamera.org/comment/31806/","msgid":"<172928661431.532453.8526457337184219338@ping.linuxembedded.co.uk>","date":"2024-10-18T21:23:34","subject":"Re: [PATCH v4 1/3] libcamera: pipeline_handler: Provide\n\tcancelRequest","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Milan Zamazal (2024-10-18 10:27:14)\n> Let's extract the two occurrences of canceling a request to a common\n> helper.  This is especially useful for the followup patch, which needs\n> to cancel a request from outside.\n> \n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nThis series fixes the assertion at shutdown with a large buffer count:\n\nTested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> ---\n>  include/libcamera/internal/pipeline_handler.h |  1 +\n>  src/libcamera/pipeline_handler.cpp            | 23 +++++++++++++------\n>  2 files changed, 17 insertions(+), 7 deletions(-)\n> \n> diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\n> index 0d3808036..fb28a18d0 100644\n> --- a/include/libcamera/internal/pipeline_handler.h\n> +++ b/include/libcamera/internal/pipeline_handler.h\n> @@ -60,6 +60,7 @@ public:\n>  \n>         bool completeBuffer(Request *request, FrameBuffer *buffer);\n>         void completeRequest(Request *request);\n> +       void cancelRequest(Request *request);\n>  \n>         std::string configurationFile(const std::string &subdir,\n>                                       const std::string &name) const;\n> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\n> index e59404691..c9cb11f0f 100644\n> --- a/src/libcamera/pipeline_handler.cpp\n> +++ b/src/libcamera/pipeline_handler.cpp\n> @@ -367,9 +367,7 @@ void PipelineHandler::stop(Camera *camera)\n>         while (!waitingRequests_.empty()) {\n>                 Request *request = waitingRequests_.front();\n>                 waitingRequests_.pop();\n> -\n> -               request->_d()->cancel();\n> -               completeRequest(request);\n> +               cancelRequest(request);\n>         }\n>  \n>         /* Make sure no requests are pending. */\n> @@ -470,10 +468,8 @@ void PipelineHandler::doQueueRequest(Request *request)\n>         }\n>  \n>         int ret = queueRequestDevice(camera, request);\n> -       if (ret) {\n> -               request->_d()->cancel();\n> -               completeRequest(request);\n> -       }\n> +       if (ret)\n> +               cancelRequest(request);\n>  }\n>  \n>  /**\n> @@ -568,6 +564,19 @@ void PipelineHandler::completeRequest(Request *request)\n>         }\n>  }\n>  \n> +/**\n> + * \\brief Cancel request and signal its completion\n> + * \\param[in] request The request to cancel\n> + *\n> + * This function cancels the request in addition to its completion. The same\n> + * rules as for completeRequest() apply.\n> + */\n> +void PipelineHandler::cancelRequest(Request *request)\n> +{\n> +       request->_d()->cancel();\n> +       completeRequest(request);\n> +}\n> +\n>  /**\n>   * \\brief Retrieve the absolute path to a platform configuration file\n>   * \\param[in] subdir The pipeline handler specific subdirectory name\n> -- \n> 2.44.1\n>","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 12DE4C32FE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 18 Oct 2024 21:23:40 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C66226538A;\n\tFri, 18 Oct 2024 23:23:38 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 38B04633C6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Oct 2024 23:23:37 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0AB2C268;\n\tFri, 18 Oct 2024 23:21:53 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"CIe2xr89\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1729286513;\n\tbh=M3ma2vudHNrXqY+0t/R0+XmrqC+nRZWroUNyXXwwpxQ=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=CIe2xr89963LIraZ+T1Mr+A3ZuwzRstaU2h2FfrmHyBXQzuUCHbXw5r/QVKmJ1KBv\n\tnQvH/62q7R7xempnsLC/3k26Q1EIUnUtlvWbGztL4ACNpu51ZMPlsBE+tErjO/8zt/\n\tHO3KIeFGC61IjkdO1V2QcEFogViiFHIaFBq4/SEU=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20241018092716.295624-2-mzamazal@redhat.com>","References":"<20241018092716.295624-1-mzamazal@redhat.com>\n\t<20241018092716.295624-2-mzamazal@redhat.com>","Subject":"Re: [PATCH v4 1/3] libcamera: pipeline_handler: Provide\n\tcancelRequest","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Milan Zamazal <mzamazal@redhat.com>, robert.mader@posteo.de,\n\tlaurent.pinchart@ideasonboard.com","To":"Milan Zamazal <mzamazal@redhat.com>, libcamera-devel@lists.libcamera.org","Date":"Fri, 18 Oct 2024 22:23:34 +0100","Message-ID":"<172928661431.532453.8526457337184219338@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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>"}}]