Show a cover letter.

GET /api/covers/13521/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 13521,
    "url": "https://patchwork.libcamera.org/api/covers/13521/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/13521/",
    "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": "<20210827023829.5871-1-laurent.pinchart@ideasonboard.com>",
    "date": "2021-08-27T02:38:23",
    "name": "[libcamera-devel,v1,0/6] libcamera: Drop emitter object pointer from signal arguments",
    "submitter": {
        "id": 2,
        "url": "https://patchwork.libcamera.org/api/people/2/?format=api",
        "name": "Laurent Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/13521/mbox/",
    "series": [
        {
            "id": 2402,
            "url": "https://patchwork.libcamera.org/api/series/2402/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2402",
            "date": "2021-08-27T02:38:23",
            "name": "libcamera: Drop emitter object pointer from signal arguments",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/2402/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/13521/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 B24FABD87D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Aug 2021 02:38:48 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9A9D76893F;\n\tFri, 27 Aug 2021 04:38:47 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 161DE60288\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Aug 2021 04:38:46 +0200 (CEST)",
            "from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 869655A1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Aug 2021 04:38:45 +0200 (CEST)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"VXWxVhzy\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1630031925;\n\tbh=WlhALTuS8V7wFxvs8ERD8VhtzPJVvxqD4Dt6ptls9C0=;\n\th=From:To:Subject:Date:From;\n\tb=VXWxVhzyndmEXb2yc9ugps6d+NJ0vnngTpU4k+UVBmjVJL3gy85EVc+5E4CSXy+4Z\n\t5Yo9gQarop2LZtX31fNJNp8Mo5Ac2zpyu8v/2pq8FpaMPhoO6X1iB5c2Oi6vp6/xfG\n\tB4l70Nbyg6iBjU8qGigFcmZjqcwRMAlUbfn8LggE=",
        "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Fri, 27 Aug 2021 05:38:23 +0300",
        "Message-Id": "<20210827023829.5871-1-laurent.pinchart@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.31.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v1 0/6] libcamera: Drop emitter object\n\tpointer from signal arguments",
        "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": "Hello,\n\nMany signals used in internal and public APIs carry the emitter pointer\nas a signal argument. This was done to allow slots connected to multiple\nsignal instances to differentiate between emitters. While starting from\na good intention of facilitating the implementation of slots, it turned\nout to be a bad API design as the signal isn't meant to know what it\nwill be connected to, and thus shouldn't carry parameters that are\nsolely meant to support a use case specific to the connected slot.\n\nThis series fixes the issue. It starts with four patches that rework the\nBoundMethod and Signal implementation. Patch 1/6 is a drive-by fix that\nuses a simpler and less costly signal disconnection function when\napplicable. Patches 2/6 and 3/6 then simplify the BoundMethod\nimplementation by removing two template specializations that turned out\nto be replaceable by simpler options. Patch 4/6 adds support for\nconnecting signals to functors (and in particular to lambda functions),\nwhich is needed to address the problem at hand.\n\nPatch 5/6 reworks the implementation of some slots to avoid using the\nemitter pointer argument when the same object is available through a\nclass member. Patch 6/6 finally drops the emitter pointer from signals,\nreplacing the only case where the pointer is actually needed with a\nlambda wrapper.\n\nLaurent Pinchart (6):\n  libcamera: Use simpler Signal::disconnect() function\n  libcamera: base: bound_method: Remove BoundMethodMember specialization\n  libcamera: base: bound_method: Remove BoundMethodArgs specialization\n  libcamera: base: signal: Support connecting signals to functors\n  libcamera: Don't use emitter object pointer argument to slot\n  libcamera: Drop emitter object pointer from signal arguments\n\n Documentation/Doxyfile.in                     |   1 +\n include/libcamera/base/bound_method.h         | 111 ++++++++----------\n include/libcamera/base/event_notifier.h       |   2 +-\n include/libcamera/base/signal.h               |  19 +++\n include/libcamera/base/thread.h               |   2 +-\n include/libcamera/base/timer.h                |   2 +-\n include/libcamera/camera.h                    |   2 +-\n .../internal/device_enumerator_udev.h         |   2 +-\n .../libcamera/internal/ipc_pipe_unixsocket.h  |   2 +-\n include/libcamera/internal/ipc_unixsocket.h   |   4 +-\n include/libcamera/internal/media_device.h     |   2 +-\n include/libcamera/internal/process.h          |   4 +-\n include/libcamera/internal/v4l2_device.h      |   2 +-\n include/libcamera/internal/v4l2_videodevice.h |   2 +-\n src/lc-compliance/simple_capture.cpp          |   2 +-\n src/libcamera/base/event_dispatcher_poll.cpp  |   4 +-\n src/libcamera/base/signal.cpp                 |  24 ++++\n src/libcamera/base/thread.cpp                 |   2 +-\n src/libcamera/camera.cpp                      |   2 +-\n src/libcamera/camera_manager.cpp              |   2 +-\n src/libcamera/device_enumerator.cpp           |   2 +-\n src/libcamera/device_enumerator_udev.cpp      |   2 +-\n src/libcamera/ipc_pipe_unixsocket.cpp         |   4 +-\n src/libcamera/ipc_unixsocket.cpp              |   4 +-\n src/libcamera/pipeline_handler.cpp            |   2 +-\n src/libcamera/process.cpp                     |   4 +-\n src/libcamera/v4l2_device.cpp                 |   3 +-\n src/libcamera/v4l2_videodevice.cpp            |   3 +-\n src/qcam/main_window.cpp                      |   4 +-\n test/camera/camera_reconfigure.cpp            |   2 +-\n test/event-thread.cpp                         |   4 +-\n test/event.cpp                                |  17 ++-\n test/ipa/ipa_interface_test.cpp               |   4 +-\n test/ipc/unixsocket.cpp                       |   8 +-\n test/ipc/unixsocket_ipc.cpp                   |   4 +-\n test/log/log_process.cpp                      |   3 +-\n test/process/process_test.cpp                 |   3 +-\n test/signal.cpp                               |  39 ++++++\n test/timer-thread.cpp                         |   2 +-\n test/timer.cpp                                |   2 +-\n .../module_ipa_proxy_worker.cpp.tmpl          |   4 +-\n 41 files changed, 192 insertions(+), 121 deletions(-)"
}