{"id":11068,"url":"https://patchwork.libcamera.org/api/1.1/covers/11068/?format=json","web_url":"https://patchwork.libcamera.org/cover/11068/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/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":"<20210130001915.489703-1-niklas.soderlund@ragnatech.se>","date":"2021-01-30T00:19:13","name":"[libcamera-devel,v3,0/2] cam: Fix races in event loop and long request processing times","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/1.1/people/5/?format=json","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"mbox":"https://patchwork.libcamera.org/cover/11068/mbox/","series":[{"id":1629,"url":"https://patchwork.libcamera.org/api/1.1/series/1629/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1629","date":"2021-01-30T00:19:13","name":"cam: Fix races in event loop and long request processing times","version":3,"mbox":"https://patchwork.libcamera.org/series/1629/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/11068/comments/","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 DC289BD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 30 Jan 2021 00:19:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3635F683C8;\n\tSat, 30 Jan 2021 01:19:39 +0100 (CET)","from bin-mail-out-06.binero.net (bin-mail-out-06.binero.net\n\t[195.74.38.229])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1AA1A6030A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 30 Jan 2021 01:19:37 +0100 (CET)","from bismarck.berto.se (p4fca2458.dip0.t-ipconnect.de\n\t[79.202.36.88])\n\tby bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA\n\tid d26ac818-6290-11eb-b73f-0050569116f7;\n\tSat, 30 Jan 2021 01:19:35 +0100 (CET)"],"X-Halon-ID":"d26ac818-6290-11eb-b73f-0050569116f7","Authorized-sender":"niklas.soderlund@fsdn.se","From":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","To":"libcamera-devel@lists.libcamera.org","Date":"Sat, 30 Jan 2021 01:19:13 +0100","Message-Id":"<20210130001915.489703-1-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.30.0","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH v3 0/2] cam: Fix races in event loop and\n\tlong request processing times","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Hello,\n\nUsing cam to writing requests to (slow) media sometimes lock cam in an\nunbreakable loop. At the heart of the problem is that when request\nprocessing was moved from the camera to the main thread subtle races in\nthe cam event loop implementation where exposed.\n\nThe races are easily trigged by having callbacks injected into the even\nloop that takes a long time to process. The only callbacks cam currently\ninjects to the event loop are processing of completed requests. So by\nincreasing there processing time by writing them to disk the races where\ntrigged.\n\nThis series fixes two different issues found when debugging this. Patch\n1/2 solves a design issue in the event loop implementation where the\ncallback queue can be flooded which prevents termination of the loop.\nWhile patch 2/2 solves a cam design issue where the --capture=N behavior\nof only capturing N requests where broken but hidden by the problem in\npatch 1/2.\n\nNiklas Söderlund (2):\n  cam: event_loop: Stop queuing calls when the event loop are exiting\n  cam: Only queue the exact number of requests asked for\n\n src/cam/capture.cpp    | 16 +++++++++++++---\n src/cam/capture.h      |  2 ++\n src/cam/event_loop.cpp | 21 +++++++++------------\n src/cam/event_loop.h   |  2 +-\n 4 files changed, 25 insertions(+), 16 deletions(-)"}