[{"id":19171,"web_url":"https://patchwork.libcamera.org/comment/19171/","msgid":"<3ccd11dd-37bc-badf-7471-cc118646ab3b@ideasonboard.com>","date":"2021-08-30T12:05:37","subject":"Re: [libcamera-devel] [PATCH v1 6/6] libcamera: Drop emitter object\n\tpointer from signal arguments","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 8/27/21 8:08 AM, Laurent Pinchart wrote:\n> Many signals used in internal and public APIs carry the emitter pointer\n> as a signal argument. This was done to allow slots connected to multiple\n> signal instances to differentiate between emitters. While starting from\n> a good intention of facilitating the implementation of slots, it turned\n> out to be a bad API design as the signal isn't meant to know what it\n> will be connected to, and thus shouldn't carry parameters that are\n> solely meant to support a use case specific to the connected slot.\n>\n> These pointers turn out to be unused in all slots but one. In the only\n> case where it is needed, it can be obtained by wrapping the slot in a\n> lambda function when connecting the signal. Do so, and drop the emitter\n> pointer from all signals.\n\n\nhmm, When you said, the emitter object pointer is not required during \nsignal emission, i initially thought, it's not required to be explicitly \nto be mentioned the argument list - during the signal emission for e.g.\n\n     class XYZ:\n\n         ....\n         Signal<XYZ *, Arg A, Arg B> sig;\n\nbecomes\n\n     class XYZ:\n\n         ....\n         Signal<Arg A, Arg B> sig;\n\nBut the slot essentially remained unchanged for both cases i.e. for \nevery signal, the passing of emitter pointer can be automatic/implicit to:\n\n     signalSlot(XYZ *, Arg A, Arg B)\n\n     {}\n\n\nWell, you are right about how the pointers mostly turned out to be \nunused, so I am not opposed with series as such. I suspect some cases \nwill still pop up, where we do need to emitter pointer in the slot, but \nas I see below, we can address those with a lamda func.\n\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n\n\n> ---\n>   include/libcamera/base/event_notifier.h                       | 2 +-\n>   include/libcamera/base/thread.h                               | 2 +-\n>   include/libcamera/base/timer.h                                | 2 +-\n>   include/libcamera/camera.h                                    | 2 +-\n>   include/libcamera/internal/device_enumerator_udev.h           | 2 +-\n>   include/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/libcamera/base/event_dispatcher_poll.cpp                  | 4 ++--\n>   src/libcamera/base/thread.cpp                                 | 2 +-\n>   src/libcamera/camera.cpp                                      | 2 +-\n>   src/libcamera/device_enumerator.cpp                           | 2 +-\n>   src/libcamera/device_enumerator_udev.cpp                      | 2 +-\n>   src/libcamera/ipc_pipe_unixsocket.cpp                         | 2 +-\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>   test/event-thread.cpp                                         | 2 +-\n>   test/event.cpp                                                | 2 +-\n>   test/ipa/ipa_interface_test.cpp                               | 2 +-\n>   test/ipc/unixsocket.cpp                                       | 4 ++--\n>   test/ipc/unixsocket_ipc.cpp                                   | 2 +-\n>   test/log/log_process.cpp                                      | 3 +--\n>   test/process/process_test.cpp                                 | 3 +--\n>   test/timer-thread.cpp                                         | 2 +-\n>   test/timer.cpp                                                | 2 +-\n>   .../libcamera_templates/module_ipa_proxy_worker.cpp.tmpl      | 2 +-\n>   32 files changed, 38 insertions(+), 42 deletions(-)\n>\n> diff --git a/include/libcamera/base/event_notifier.h b/include/libcamera/base/event_notifier.h\n> index 5055ccbf21ca..f7722a32ef55 100644\n> --- a/include/libcamera/base/event_notifier.h\n> +++ b/include/libcamera/base/event_notifier.h\n> @@ -34,7 +34,7 @@ public:\n>   \tbool enabled() const { return enabled_; }\n>   \tvoid setEnabled(bool enable);\n>   \n> -\tSignal<EventNotifier *> activated;\n> +\tSignal<> activated;\n>   \n>   protected:\n>   \tvoid message(Message *msg) override;\n> diff --git a/include/libcamera/base/thread.h b/include/libcamera/base/thread.h\n> index 762beab2a360..e0ca0aeaa761 100644\n> --- a/include/libcamera/base/thread.h\n> +++ b/include/libcamera/base/thread.h\n> @@ -41,7 +41,7 @@ public:\n>   \n>   \tbool isRunning();\n>   \n> -\tSignal<Thread *> finished;\n> +\tSignal<> finished;\n>   \n>   \tstatic Thread *current();\n>   \tstatic pid_t currentId();\n> diff --git a/include/libcamera/base/timer.h b/include/libcamera/base/timer.h\n> index 798821611c6c..44876a85dc0a 100644\n> --- a/include/libcamera/base/timer.h\n> +++ b/include/libcamera/base/timer.h\n> @@ -33,7 +33,7 @@ public:\n>   \n>   \tstd::chrono::steady_clock::time_point deadline() const { return deadline_; }\n>   \n> -\tSignal<Timer *> timeout;\n> +\tSignal<> timeout;\n>   \n>   protected:\n>   \tvoid message(Message *msg) override;\n> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> index 05cdab724b10..601ee46e415b 100644\n> --- a/include/libcamera/camera.h\n> +++ b/include/libcamera/camera.h\n> @@ -86,7 +86,7 @@ public:\n>   \n>   \tSignal<Request *, FrameBuffer *> bufferCompleted;\n>   \tSignal<Request *> requestCompleted;\n> -\tSignal<Camera *> disconnected;\n> +\tSignal<> disconnected;\n>   \n>   \tint acquire();\n>   \tint release();\n> diff --git a/include/libcamera/internal/device_enumerator_udev.h b/include/libcamera/internal/device_enumerator_udev.h\n> index 58e64a297b1d..c035298081b4 100644\n> --- a/include/libcamera/internal/device_enumerator_udev.h\n> +++ b/include/libcamera/internal/device_enumerator_udev.h\n> @@ -59,7 +59,7 @@ private:\n>   \tstd::string lookupDeviceNode(dev_t devnum);\n>   \n>   \tint addV4L2Device(dev_t devnum);\n> -\tvoid udevNotify(EventNotifier *notifier);\n> +\tvoid udevNotify();\n>   \n>   \tstruct udev *udev_;\n>   \tstruct udev_monitor *monitor_;\n> diff --git a/include/libcamera/internal/ipc_pipe_unixsocket.h b/include/libcamera/internal/ipc_pipe_unixsocket.h\n> index 4ffdddcc7f92..ad2927fed7f0 100644\n> --- a/include/libcamera/internal/ipc_pipe_unixsocket.h\n> +++ b/include/libcamera/internal/ipc_pipe_unixsocket.h\n> @@ -35,7 +35,7 @@ private:\n>   \t\tbool done;\n>   \t};\n>   \n> -\tvoid readyRead(IPCUnixSocket *socket);\n> +\tvoid readyRead();\n>   \tint call(const IPCUnixSocket::Payload &message,\n>   \t\t IPCUnixSocket::Payload *response, uint32_t seq);\n>   \n> diff --git a/include/libcamera/internal/ipc_unixsocket.h b/include/libcamera/internal/ipc_unixsocket.h\n> index 9f5b06773ced..2b87196c4851 100644\n> --- a/include/libcamera/internal/ipc_unixsocket.h\n> +++ b/include/libcamera/internal/ipc_unixsocket.h\n> @@ -37,7 +37,7 @@ public:\n>   \tint send(const Payload &payload);\n>   \tint receive(Payload *payload);\n>   \n> -\tSignal<IPCUnixSocket *> readyRead;\n> +\tSignal<> readyRead;\n>   \n>   private:\n>   \tstruct Header {\n> @@ -48,7 +48,7 @@ private:\n>   \tint sendData(const void *buffer, size_t length, const int32_t *fds, unsigned int num);\n>   \tint recvData(void *buffer, size_t length, int32_t *fds, unsigned int num);\n>   \n> -\tvoid dataNotifier(EventNotifier *notifier);\n> +\tvoid dataNotifier();\n>   \n>   \tint fd_;\n>   \tbool headerReceived_;\n> diff --git a/include/libcamera/internal/media_device.h b/include/libcamera/internal/media_device.h\n> index 3a7722c2a215..1f2304c19281 100644\n> --- a/include/libcamera/internal/media_device.h\n> +++ b/include/libcamera/internal/media_device.h\n> @@ -53,7 +53,7 @@ public:\n>   \tMediaLink *link(const MediaPad *source, const MediaPad *sink);\n>   \tint disableLinks();\n>   \n> -\tSignal<MediaDevice *> disconnected;\n> +\tSignal<> disconnected;\n>   \n>   protected:\n>   \tstd::string logPrefix() const override;\n> diff --git a/include/libcamera/internal/process.h b/include/libcamera/internal/process.h\n> index c4d5d9c1c009..300e0521eb03 100644\n> --- a/include/libcamera/internal/process.h\n> +++ b/include/libcamera/internal/process.h\n> @@ -38,7 +38,7 @@ public:\n>   \n>   \tvoid kill();\n>   \n> -\tSignal<Process *, enum ExitStatus, int> finished;\n> +\tSignal<enum ExitStatus, int> finished;\n>   \n>   private:\n>   \tvoid closeAllFdsExcept(const std::vector<int> &fds);\n> @@ -70,7 +70,7 @@ public:\n>   private:\n>   \tstatic ProcessManager *self_;\n>   \n> -\tvoid sighandler(EventNotifier *notifier);\n> +\tvoid sighandler();\n>   \n>   \tstd::list<Process *> processes_;\n>   \n> diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h\n> index 423c8fb11845..f21bc3701ca0 100644\n> --- a/include/libcamera/internal/v4l2_device.h\n> +++ b/include/libcamera/internal/v4l2_device.h\n> @@ -65,7 +65,7 @@ private:\n>   \tvoid updateControls(ControlList *ctrls,\n>   \t\t\t    Span<const v4l2_ext_control> v4l2Ctrls);\n>   \n> -\tvoid eventAvailable(EventNotifier *notifier);\n> +\tvoid eventAvailable();\n>   \n>   \tstd::map<unsigned int, struct v4l2_query_ext_ctrl> controlInfo_;\n>   \tstd::vector<std::unique_ptr<ControlId>> controlIds_;\n> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h\n> index e767ec84c4da..400d4490d016 100644\n> --- a/include/libcamera/internal/v4l2_videodevice.h\n> +++ b/include/libcamera/internal/v4l2_videodevice.h\n> @@ -238,7 +238,7 @@ private:\n>   \tstd::unique_ptr<FrameBuffer> createBuffer(unsigned int index);\n>   \tFileDescriptor exportDmabufFd(unsigned int index, unsigned int plane);\n>   \n> -\tvoid bufferAvailable(EventNotifier *notifier);\n> +\tvoid bufferAvailable();\n>   \tFrameBuffer *dequeueBuffer();\n>   \n>   \tV4L2Capability caps_;\n> diff --git a/src/libcamera/base/event_dispatcher_poll.cpp b/src/libcamera/base/event_dispatcher_poll.cpp\n> index 4f22f5793bb9..3c9a126c0bd6 100644\n> --- a/src/libcamera/base/event_dispatcher_poll.cpp\n> +++ b/src/libcamera/base/event_dispatcher_poll.cpp\n> @@ -278,7 +278,7 @@ void EventDispatcherPoll::processNotifiers(const std::vector<struct pollfd> &pol\n>   \t\t\t}\n>   \n>   \t\t\tif (pfd.revents & event.events)\n> -\t\t\t\tnotifier->activated.emit(notifier);\n> +\t\t\t\tnotifier->activated.emit();\n>   \t\t}\n>   \n>   \t\t/* Erase the notifiers_ entry if it is now empty. */\n> @@ -300,7 +300,7 @@ void EventDispatcherPoll::processTimers()\n>   \n>   \t\ttimers_.pop_front();\n>   \t\ttimer->stop();\n> -\t\ttimer->timeout.emit(timer);\n> +\t\ttimer->timeout.emit();\n>   \t}\n>   }\n>   \n> diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp\n> index bd7b73911d12..d0ca30e3d522 100644\n> --- a/src/libcamera/base/thread.cpp\n> +++ b/src/libcamera/base/thread.cpp\n> @@ -384,7 +384,7 @@ void Thread::finishThread()\n>   \tdata_->running_ = false;\n>   \tdata_->mutex_.unlock();\n>   \n> -\tfinished.emit(this);\n> +\tfinished.emit();\n>   \tdata_->cv_.notify_all();\n>   }\n>   \n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index c20e05014fb9..b5849d4d401a 100644\n> --- a/src/libcamera/camera.cpp\n> +++ b/src/libcamera/camera.cpp\n> @@ -688,7 +688,7 @@ void Camera::disconnect()\n>   \tLOG(Camera, Debug) << \"Disconnecting camera \" << id();\n>   \n>   \t_d()->disconnect();\n> -\tdisconnected.emit(this);\n> +\tdisconnected.emit();\n>   }\n>   \n>   int Camera::exportFrameBuffers(Stream *stream,\n> diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp\n> index ec59927eaf34..d12580505303 100644\n> --- a/src/libcamera/device_enumerator.cpp\n> +++ b/src/libcamera/device_enumerator.cpp\n> @@ -288,7 +288,7 @@ void DeviceEnumerator::removeDevice(const std::string &deviceNode)\n>   \tLOG(DeviceEnumerator, Debug)\n>   \t\t<< \"Media device for node \" << deviceNode << \" removed.\";\n>   \n> -\tmedia->disconnected.emit(media.get());\n> +\tmedia->disconnected.emit();\n>   }\n>   \n>   /**\n> diff --git a/src/libcamera/device_enumerator_udev.cpp b/src/libcamera/device_enumerator_udev.cpp\n> index 37a2c5aa55db..5317afbd77ce 100644\n> --- a/src/libcamera/device_enumerator_udev.cpp\n> +++ b/src/libcamera/device_enumerator_udev.cpp\n> @@ -327,7 +327,7 @@ int DeviceEnumeratorUdev::addV4L2Device(dev_t devnum)\n>   \treturn 0;\n>   }\n>   \n> -void DeviceEnumeratorUdev::udevNotify([[maybe_unused]] EventNotifier *notifier)\n> +void DeviceEnumeratorUdev::udevNotify()\n>   {\n>   \tstruct udev_device *dev = udev_monitor_receive_device(monitor_);\n>   \tstd::string action(udev_device_get_action(dev));\n> diff --git a/src/libcamera/ipc_pipe_unixsocket.cpp b/src/libcamera/ipc_pipe_unixsocket.cpp\n> index 38bcc30a21ed..533560cf95d3 100644\n> --- a/src/libcamera/ipc_pipe_unixsocket.cpp\n> +++ b/src/libcamera/ipc_pipe_unixsocket.cpp\n> @@ -82,7 +82,7 @@ int IPCPipeUnixSocket::sendAsync(const IPCMessage &data)\n>   \treturn 0;\n>   }\n>   \n> -void IPCPipeUnixSocket::readyRead([[maybe_unused]] IPCUnixSocket *socket)\n> +void IPCPipeUnixSocket::readyRead()\n>   {\n>   \tIPCUnixSocket::Payload payload;\n>   \tint ret = socket_->receive(&payload);\n> diff --git a/src/libcamera/ipc_unixsocket.cpp b/src/libcamera/ipc_unixsocket.cpp\n> index 7188cf29e56a..bd32fca3a678 100644\n> --- a/src/libcamera/ipc_unixsocket.cpp\n> +++ b/src/libcamera/ipc_unixsocket.cpp\n> @@ -311,7 +311,7 @@ int IPCUnixSocket::recvData(void *buffer, size_t length,\n>   \treturn 0;\n>   }\n>   \n> -void IPCUnixSocket::dataNotifier([[maybe_unused]] EventNotifier *notifier)\n> +void IPCUnixSocket::dataNotifier()\n>   {\n>   \tint ret;\n>   \n> @@ -342,7 +342,7 @@ void IPCUnixSocket::dataNotifier([[maybe_unused]] EventNotifier *notifier)\n>   \t\treturn;\n>   \n>   \tnotifier_->setEnabled(false);\n> -\treadyRead.emit(this);\n> +\treadyRead.emit();\n>   }\n>   \n>   } /* namespace libcamera */\n> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\n> index 597d4c6a578a..f69c4f03b80f 100644\n> --- a/src/libcamera/pipeline_handler.cpp\n> +++ b/src/libcamera/pipeline_handler.cpp\n> @@ -448,7 +448,7 @@ void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)\n>    */\n>   void PipelineHandler::hotplugMediaDevice(MediaDevice *media)\n>   {\n> -\tmedia->disconnected.connect(this, &PipelineHandler::mediaDeviceDisconnected);\n> +\tmedia->disconnected.connect(this, [=]() { mediaDeviceDisconnected(media); });\n>   }\n>   \n>   /**\n> diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp\n> index 998d08c2d88a..eca1b30039b8 100644\n> --- a/src/libcamera/process.cpp\n> +++ b/src/libcamera/process.cpp\n> @@ -66,7 +66,7 @@ void sigact(int signal, siginfo_t *info, void *ucontext)\n>   \n>   } /* namespace */\n>   \n> -void ProcessManager::sighandler([[maybe_unused]] EventNotifier *notifier)\n> +void ProcessManager::sighandler()\n>   {\n>   \tchar data;\n>   \tssize_t ret = read(pipe_[0], &data, sizeof(data));\n> @@ -326,7 +326,7 @@ void Process::died(int wstatus)\n>   \texitStatus_ = WIFEXITED(wstatus) ? NormalExit : SignalExit;\n>   \texitCode_ = exitStatus_ == NormalExit ? WEXITSTATUS(wstatus) : -1;\n>   \n> -\tfinished.emit(this, exitStatus_, exitCode_);\n> +\tfinished.emit(exitStatus_, exitCode_);\n>   }\n>   \n>   /**\n> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n> index 951592c698f7..9c783c9cbed1 100644\n> --- a/src/libcamera/v4l2_device.cpp\n> +++ b/src/libcamera/v4l2_device.cpp\n> @@ -705,12 +705,11 @@ void V4L2Device::updateControls(ControlList *ctrls,\n>   \n>   /**\n>    * \\brief Slot to handle V4L2 events from the V4L2 device\n> - * \\param[in] notifier The event notifier\n>    *\n>    * When this slot is called, a V4L2 event is available to be dequeued from the\n>    * device.\n>    */\n> -void V4L2Device::eventAvailable([[maybe_unused]] EventNotifier *notifier)\n> +void V4L2Device::eventAvailable()\n>   {\n>   \tstruct v4l2_event event{};\n>   \tint ret = ioctl(VIDIOC_DQEVENT, &event);\n> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\n> index ce60dff6cdfd..1684d0e9c8dd 100644\n> --- a/src/libcamera/v4l2_videodevice.cpp\n> +++ b/src/libcamera/v4l2_videodevice.cpp\n> @@ -1467,7 +1467,6 @@ int V4L2VideoDevice::queueBuffer(FrameBuffer *buffer)\n>   \n>   /**\n>    * \\brief Slot to handle completed buffer events from the V4L2 video device\n> - * \\param[in] notifier The event notifier\n>    *\n>    * When this slot is called, a Buffer has become available from the device, and\n>    * will be emitted through the bufferReady Signal.\n> @@ -1475,7 +1474,7 @@ int V4L2VideoDevice::queueBuffer(FrameBuffer *buffer)\n>    * For Capture video devices the FrameBuffer will contain valid data.\n>    * For Output video devices the FrameBuffer can be considered empty.\n>    */\n> -void V4L2VideoDevice::bufferAvailable([[maybe_unused]] EventNotifier *notifier)\n> +void V4L2VideoDevice::bufferAvailable()\n>   {\n>   \tFrameBuffer *buffer = dequeueBuffer();\n>   \tif (!buffer)\n> diff --git a/test/event-thread.cpp b/test/event-thread.cpp\n> index 12021710ef41..ef8a52c3de55 100644\n> --- a/test/event-thread.cpp\n> +++ b/test/event-thread.cpp\n> @@ -66,7 +66,7 @@ public:\n>   \t}\n>   \n>   private:\n> -\tvoid readReady([[maybe_unused]] EventNotifier *notifier)\n> +\tvoid readReady()\n>   \t{\n>   \t\tsize_ = read(notifier_->fd(), data_, sizeof(data_));\n>   \t\tnotified_ = true;\n> diff --git a/test/event.cpp b/test/event.cpp\n> index e338335c11e8..d4765eb14d12 100644\n> --- a/test/event.cpp\n> +++ b/test/event.cpp\n> @@ -22,7 +22,7 @@ using namespace libcamera;\n>   class EventTest : public Test\n>   {\n>   protected:\n> -\tvoid readReady([[maybe_unused]] EventNotifier *notifier)\n> +\tvoid readReady()\n>   \t{\n>   \t\tsize_ = read(notifier_->fd(), data_, sizeof(data_));\n>   \t\tnotified_ = true;\n> diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp\n> index 0ee51f71fd87..43562e608506 100644\n> --- a/test/ipa/ipa_interface_test.cpp\n> +++ b/test/ipa/ipa_interface_test.cpp\n> @@ -153,7 +153,7 @@ protected:\n>   \t}\n>   \n>   private:\n> -\tvoid readTrace([[maybe_unused]] EventNotifier *notifier)\n> +\tvoid readTrace()\n>   \t{\n>   \t\tssize_t s = read(notifier_->fd(), &trace_, sizeof(trace_));\n>   \t\tif (s < 0) {\n> diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp\n> index 6507fb12d74b..7270bf4d2fe7 100644\n> --- a/test/ipc/unixsocket.cpp\n> +++ b/test/ipc/unixsocket.cpp\n> @@ -68,7 +68,7 @@ public:\n>   \t}\n>   \n>   private:\n> -\tvoid readyRead([[maybe_unused]] IPCUnixSocket *ipc)\n> +\tvoid readyRead()\n>   \t{\n>   \t\tIPCUnixSocket::Payload message, response;\n>   \t\tint ret;\n> @@ -447,7 +447,7 @@ private:\n>   \t\treturn 0;\n>   \t}\n>   \n> -\tvoid readyRead([[maybe_unused]] IPCUnixSocket *ipc)\n> +\tvoid readyRead()\n>   \t{\n>   \t\tif (!callResponse_) {\n>   \t\t\tcerr << \"Read ready without expecting data, fail.\" << endl;\n> diff --git a/test/ipc/unixsocket_ipc.cpp b/test/ipc/unixsocket_ipc.cpp\n> index 60317a4956b8..ab5d25572d83 100644\n> --- a/test/ipc/unixsocket_ipc.cpp\n> +++ b/test/ipc/unixsocket_ipc.cpp\n> @@ -65,7 +65,7 @@ public:\n>   \t}\n>   \n>   private:\n> -\tvoid readyRead([[maybe_unused]] IPCUnixSocket *ipc)\n> +\tvoid readyRead()\n>   \t{\n>   \t\tIPCUnixSocket::Payload message;\n>   \t\tint ret;\n> diff --git a/test/log/log_process.cpp b/test/log/log_process.cpp\n> index d138aa7ff562..a56a399848a7 100644\n> --- a/test/log/log_process.cpp\n> +++ b/test/log/log_process.cpp\n> @@ -126,8 +126,7 @@ protected:\n>   \t}\n>   \n>   private:\n> -\tvoid procFinished([[maybe_unused]] Process *proc,\n> -\t\t\t  enum Process::ExitStatus exitStatus, int exitCode)\n> +\tvoid procFinished(enum Process::ExitStatus exitStatus, int exitCode)\n>   \t{\n>   \t\texitStatus_ = exitStatus;\n>   \t\texitCode_ = exitCode;\n> diff --git a/test/process/process_test.cpp b/test/process/process_test.cpp\n> index 8f7a1f05f681..378d680bf4ef 100644\n> --- a/test/process/process_test.cpp\n> +++ b/test/process/process_test.cpp\n> @@ -81,8 +81,7 @@ protected:\n>   \t}\n>   \n>   private:\n> -\tvoid procFinished([[maybe_unused]] Process *proc,\n> -\t\t\t  enum Process::ExitStatus exitStatus, int exitCode)\n> +\tvoid procFinished(enum Process::ExitStatus exitStatus, int exitCode)\n>   \t{\n>   \t\texitStatus_ = exitStatus;\n>   \t\texitCode_ = exitCode;\n> diff --git a/test/timer-thread.cpp b/test/timer-thread.cpp\n> index 2c14865b74d5..f7e8743da9e6 100644\n> --- a/test/timer-thread.cpp\n> +++ b/test/timer-thread.cpp\n> @@ -39,7 +39,7 @@ public:\n>   \t}\n>   \n>   private:\n> -\tvoid timeoutHandler([[maybe_unused]] Timer *timer)\n> +\tvoid timeoutHandler()\n>   \t{\n>   \t\ttimeout_ = true;\n>   \t}\n> diff --git a/test/timer.cpp b/test/timer.cpp\n> index 88f226e79f5f..be79d0100a58 100644\n> --- a/test/timer.cpp\n> +++ b/test/timer.cpp\n> @@ -56,7 +56,7 @@ public:\n>   \t}\n>   \n>   private:\n> -\tvoid timeoutHandler([[maybe_unused]] Timer *timer)\n> +\tvoid timeoutHandler()\n>   \t{\n>   \t\texpiration_ = std::chrono::steady_clock::now();\n>   \t\tcount_++;\n> diff --git a/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl b/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl\n> index b4cd1aa9e823..c54ecdb90a1a 100644\n> --- a/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl\n> +++ b/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl\n> @@ -57,7 +57,7 @@ public:\n>   \n>   \t~{{proxy_worker_name}}() {}\n>   \n> -\tvoid readyRead([[maybe_unused]] IPCUnixSocket *socket)\n> +\tvoid readyRead()\n>   \t{\n>   \t\tIPCUnixSocket::Payload _message;\n>   \t\tint _retRecv = socket_.receive(&_message);","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 B8088BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 30 Aug 2021 12:05:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 84BD360258;\n\tMon, 30 Aug 2021 14:05:44 +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 BFB2E60258\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 30 Aug 2021 14:05:42 +0200 (CEST)","from [192.168.1.104] (unknown [103.251.226.0])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 934E85A7;\n\tMon, 30 Aug 2021 14:05:41 +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=\"OpJLv/OG\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1630325142;\n\tbh=xhxEa7eAckUGkeD0UUa0P60co25WIzG8s7dY+JRtQwM=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=OpJLv/OGosABxqxCkud7Rk++4JYxobiC3ic98nVlh8xT82Ee3JH2PytNbJ9INDPq/\n\tRxvfoJeNf/Ypsj6jQxUYsvjEsUg9w52LqT0QLNli++BVsfauSdaZfOa0OMK1Skbu8z\n\tC1rZC2SysA+M5jYhGfYswRZXbrxB84NoAAX6cFeM=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210827023829.5871-1-laurent.pinchart@ideasonboard.com>\n\t<20210827023829.5871-7-laurent.pinchart@ideasonboard.com>","From":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<3ccd11dd-37bc-badf-7471-cc118646ab3b@ideasonboard.com>","Date":"Mon, 30 Aug 2021 17:35:37 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.10.2","MIME-Version":"1.0","In-Reply-To":"<20210827023829.5871-7-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Transfer-Encoding":"8bit","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH v1 6/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>"}},{"id":19173,"web_url":"https://patchwork.libcamera.org/comment/19173/","msgid":"<YSzVVRTRWkZpDyuq@pendragon.ideasonboard.com>","date":"2021-08-30T12:55:49","subject":"Re: [libcamera-devel] [PATCH v1 6/6] libcamera: Drop emitter object\n\tpointer from signal arguments","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Umang,\n\nOn Mon, Aug 30, 2021 at 05:35:37PM +0530, Umang Jain wrote:\n> On 8/27/21 8:08 AM, Laurent Pinchart wrote:\n> > Many signals used in internal and public APIs carry the emitter pointer\n> > as a signal argument. This was done to allow slots connected to multiple\n> > signal instances to differentiate between emitters. While starting from\n> > a good intention of facilitating the implementation of slots, it turned\n> > out to be a bad API design as the signal isn't meant to know what it\n> > will be connected to, and thus shouldn't carry parameters that are\n> > solely meant to support a use case specific to the connected slot.\n> >\n> > These pointers turn out to be unused in all slots but one. In the only\n> > case where it is needed, it can be obtained by wrapping the slot in a\n> > lambda function when connecting the signal. Do so, and drop the emitter\n> > pointer from all signals.\n> \n> hmm, When you said, the emitter object pointer is not required during \n> signal emission, i initially thought, it's not required to be explicitly \n> to be mentioned the argument list - during the signal emission for e.g.\n> \n>      class XYZ:\n> \n>          ....\n>          Signal<XYZ *, Arg A, Arg B> sig;\n> \n> becomes\n> \n>      class XYZ:\n> \n>          ....\n>          Signal<Arg A, Arg B> sig;\n> \n> But the slot essentially remained unchanged for both cases i.e. for \n> every signal, the passing of emitter pointer can be automatic/implicit to:\n> \n>      signalSlot(XYZ *, Arg A, Arg B)\n> \n>      {}\n> \n> \n> Well, you are right about how the pointers mostly turned out to be \n> unused, so I am not opposed with series as such. I suspect some cases \n> will still pop up, where we do need to emitter pointer in the slot, but \n> as I see below, we can address those with a lamda func.\n\nYes, that's the idea. From the point of view of the emitter, having an\nemitter pointer as a signal argument is really about passing context\ninformation, it's not per-emission data. As you've seen, the vast\nmajority of slots (all but one) already have the context. For the only\nslot that doesn't, using a lambda function is fairly trivial, and the\nlittle overhead we have there is I think worse the gain in all other\ncase, as well as the neater design of not having to add a signal context\nargument that is of no use to the emitter. It creates a better\nseparation between the design of the emitter and the design of the\nreceiver, leading to more reusable components.\n\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n> \n> > ---\n> >   include/libcamera/base/event_notifier.h                       | 2 +-\n> >   include/libcamera/base/thread.h                               | 2 +-\n> >   include/libcamera/base/timer.h                                | 2 +-\n> >   include/libcamera/camera.h                                    | 2 +-\n> >   include/libcamera/internal/device_enumerator_udev.h           | 2 +-\n> >   include/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/libcamera/base/event_dispatcher_poll.cpp                  | 4 ++--\n> >   src/libcamera/base/thread.cpp                                 | 2 +-\n> >   src/libcamera/camera.cpp                                      | 2 +-\n> >   src/libcamera/device_enumerator.cpp                           | 2 +-\n> >   src/libcamera/device_enumerator_udev.cpp                      | 2 +-\n> >   src/libcamera/ipc_pipe_unixsocket.cpp                         | 2 +-\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> >   test/event-thread.cpp                                         | 2 +-\n> >   test/event.cpp                                                | 2 +-\n> >   test/ipa/ipa_interface_test.cpp                               | 2 +-\n> >   test/ipc/unixsocket.cpp                                       | 4 ++--\n> >   test/ipc/unixsocket_ipc.cpp                                   | 2 +-\n> >   test/log/log_process.cpp                                      | 3 +--\n> >   test/process/process_test.cpp                                 | 3 +--\n> >   test/timer-thread.cpp                                         | 2 +-\n> >   test/timer.cpp                                                | 2 +-\n> >   .../libcamera_templates/module_ipa_proxy_worker.cpp.tmpl      | 2 +-\n> >   32 files changed, 38 insertions(+), 42 deletions(-)\n> >\n> > diff --git a/include/libcamera/base/event_notifier.h b/include/libcamera/base/event_notifier.h\n> > index 5055ccbf21ca..f7722a32ef55 100644\n> > --- a/include/libcamera/base/event_notifier.h\n> > +++ b/include/libcamera/base/event_notifier.h\n> > @@ -34,7 +34,7 @@ public:\n> >   \tbool enabled() const { return enabled_; }\n> >   \tvoid setEnabled(bool enable);\n> >   \n> > -\tSignal<EventNotifier *> activated;\n> > +\tSignal<> activated;\n> >   \n> >   protected:\n> >   \tvoid message(Message *msg) override;\n> > diff --git a/include/libcamera/base/thread.h b/include/libcamera/base/thread.h\n> > index 762beab2a360..e0ca0aeaa761 100644\n> > --- a/include/libcamera/base/thread.h\n> > +++ b/include/libcamera/base/thread.h\n> > @@ -41,7 +41,7 @@ public:\n> >   \n> >   \tbool isRunning();\n> >   \n> > -\tSignal<Thread *> finished;\n> > +\tSignal<> finished;\n> >   \n> >   \tstatic Thread *current();\n> >   \tstatic pid_t currentId();\n> > diff --git a/include/libcamera/base/timer.h b/include/libcamera/base/timer.h\n> > index 798821611c6c..44876a85dc0a 100644\n> > --- a/include/libcamera/base/timer.h\n> > +++ b/include/libcamera/base/timer.h\n> > @@ -33,7 +33,7 @@ public:\n> >   \n> >   \tstd::chrono::steady_clock::time_point deadline() const { return deadline_; }\n> >   \n> > -\tSignal<Timer *> timeout;\n> > +\tSignal<> timeout;\n> >   \n> >   protected:\n> >   \tvoid message(Message *msg) override;\n> > diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> > index 05cdab724b10..601ee46e415b 100644\n> > --- a/include/libcamera/camera.h\n> > +++ b/include/libcamera/camera.h\n> > @@ -86,7 +86,7 @@ public:\n> >   \n> >   \tSignal<Request *, FrameBuffer *> bufferCompleted;\n> >   \tSignal<Request *> requestCompleted;\n> > -\tSignal<Camera *> disconnected;\n> > +\tSignal<> disconnected;\n> >   \n> >   \tint acquire();\n> >   \tint release();\n> > diff --git a/include/libcamera/internal/device_enumerator_udev.h b/include/libcamera/internal/device_enumerator_udev.h\n> > index 58e64a297b1d..c035298081b4 100644\n> > --- a/include/libcamera/internal/device_enumerator_udev.h\n> > +++ b/include/libcamera/internal/device_enumerator_udev.h\n> > @@ -59,7 +59,7 @@ private:\n> >   \tstd::string lookupDeviceNode(dev_t devnum);\n> >   \n> >   \tint addV4L2Device(dev_t devnum);\n> > -\tvoid udevNotify(EventNotifier *notifier);\n> > +\tvoid udevNotify();\n> >   \n> >   \tstruct udev *udev_;\n> >   \tstruct udev_monitor *monitor_;\n> > diff --git a/include/libcamera/internal/ipc_pipe_unixsocket.h b/include/libcamera/internal/ipc_pipe_unixsocket.h\n> > index 4ffdddcc7f92..ad2927fed7f0 100644\n> > --- a/include/libcamera/internal/ipc_pipe_unixsocket.h\n> > +++ b/include/libcamera/internal/ipc_pipe_unixsocket.h\n> > @@ -35,7 +35,7 @@ private:\n> >   \t\tbool done;\n> >   \t};\n> >   \n> > -\tvoid readyRead(IPCUnixSocket *socket);\n> > +\tvoid readyRead();\n> >   \tint call(const IPCUnixSocket::Payload &message,\n> >   \t\t IPCUnixSocket::Payload *response, uint32_t seq);\n> >   \n> > diff --git a/include/libcamera/internal/ipc_unixsocket.h b/include/libcamera/internal/ipc_unixsocket.h\n> > index 9f5b06773ced..2b87196c4851 100644\n> > --- a/include/libcamera/internal/ipc_unixsocket.h\n> > +++ b/include/libcamera/internal/ipc_unixsocket.h\n> > @@ -37,7 +37,7 @@ public:\n> >   \tint send(const Payload &payload);\n> >   \tint receive(Payload *payload);\n> >   \n> > -\tSignal<IPCUnixSocket *> readyRead;\n> > +\tSignal<> readyRead;\n> >   \n> >   private:\n> >   \tstruct Header {\n> > @@ -48,7 +48,7 @@ private:\n> >   \tint sendData(const void *buffer, size_t length, const int32_t *fds, unsigned int num);\n> >   \tint recvData(void *buffer, size_t length, int32_t *fds, unsigned int num);\n> >   \n> > -\tvoid dataNotifier(EventNotifier *notifier);\n> > +\tvoid dataNotifier();\n> >   \n> >   \tint fd_;\n> >   \tbool headerReceived_;\n> > diff --git a/include/libcamera/internal/media_device.h b/include/libcamera/internal/media_device.h\n> > index 3a7722c2a215..1f2304c19281 100644\n> > --- a/include/libcamera/internal/media_device.h\n> > +++ b/include/libcamera/internal/media_device.h\n> > @@ -53,7 +53,7 @@ public:\n> >   \tMediaLink *link(const MediaPad *source, const MediaPad *sink);\n> >   \tint disableLinks();\n> >   \n> > -\tSignal<MediaDevice *> disconnected;\n> > +\tSignal<> disconnected;\n> >   \n> >   protected:\n> >   \tstd::string logPrefix() const override;\n> > diff --git a/include/libcamera/internal/process.h b/include/libcamera/internal/process.h\n> > index c4d5d9c1c009..300e0521eb03 100644\n> > --- a/include/libcamera/internal/process.h\n> > +++ b/include/libcamera/internal/process.h\n> > @@ -38,7 +38,7 @@ public:\n> >   \n> >   \tvoid kill();\n> >   \n> > -\tSignal<Process *, enum ExitStatus, int> finished;\n> > +\tSignal<enum ExitStatus, int> finished;\n> >   \n> >   private:\n> >   \tvoid closeAllFdsExcept(const std::vector<int> &fds);\n> > @@ -70,7 +70,7 @@ public:\n> >   private:\n> >   \tstatic ProcessManager *self_;\n> >   \n> > -\tvoid sighandler(EventNotifier *notifier);\n> > +\tvoid sighandler();\n> >   \n> >   \tstd::list<Process *> processes_;\n> >   \n> > diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h\n> > index 423c8fb11845..f21bc3701ca0 100644\n> > --- a/include/libcamera/internal/v4l2_device.h\n> > +++ b/include/libcamera/internal/v4l2_device.h\n> > @@ -65,7 +65,7 @@ private:\n> >   \tvoid updateControls(ControlList *ctrls,\n> >   \t\t\t    Span<const v4l2_ext_control> v4l2Ctrls);\n> >   \n> > -\tvoid eventAvailable(EventNotifier *notifier);\n> > +\tvoid eventAvailable();\n> >   \n> >   \tstd::map<unsigned int, struct v4l2_query_ext_ctrl> controlInfo_;\n> >   \tstd::vector<std::unique_ptr<ControlId>> controlIds_;\n> > diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h\n> > index e767ec84c4da..400d4490d016 100644\n> > --- a/include/libcamera/internal/v4l2_videodevice.h\n> > +++ b/include/libcamera/internal/v4l2_videodevice.h\n> > @@ -238,7 +238,7 @@ private:\n> >   \tstd::unique_ptr<FrameBuffer> createBuffer(unsigned int index);\n> >   \tFileDescriptor exportDmabufFd(unsigned int index, unsigned int plane);\n> >   \n> > -\tvoid bufferAvailable(EventNotifier *notifier);\n> > +\tvoid bufferAvailable();\n> >   \tFrameBuffer *dequeueBuffer();\n> >   \n> >   \tV4L2Capability caps_;\n> > diff --git a/src/libcamera/base/event_dispatcher_poll.cpp b/src/libcamera/base/event_dispatcher_poll.cpp\n> > index 4f22f5793bb9..3c9a126c0bd6 100644\n> > --- a/src/libcamera/base/event_dispatcher_poll.cpp\n> > +++ b/src/libcamera/base/event_dispatcher_poll.cpp\n> > @@ -278,7 +278,7 @@ void EventDispatcherPoll::processNotifiers(const std::vector<struct pollfd> &pol\n> >   \t\t\t}\n> >   \n> >   \t\t\tif (pfd.revents & event.events)\n> > -\t\t\t\tnotifier->activated.emit(notifier);\n> > +\t\t\t\tnotifier->activated.emit();\n> >   \t\t}\n> >   \n> >   \t\t/* Erase the notifiers_ entry if it is now empty. */\n> > @@ -300,7 +300,7 @@ void EventDispatcherPoll::processTimers()\n> >   \n> >   \t\ttimers_.pop_front();\n> >   \t\ttimer->stop();\n> > -\t\ttimer->timeout.emit(timer);\n> > +\t\ttimer->timeout.emit();\n> >   \t}\n> >   }\n> >   \n> > diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp\n> > index bd7b73911d12..d0ca30e3d522 100644\n> > --- a/src/libcamera/base/thread.cpp\n> > +++ b/src/libcamera/base/thread.cpp\n> > @@ -384,7 +384,7 @@ void Thread::finishThread()\n> >   \tdata_->running_ = false;\n> >   \tdata_->mutex_.unlock();\n> >   \n> > -\tfinished.emit(this);\n> > +\tfinished.emit();\n> >   \tdata_->cv_.notify_all();\n> >   }\n> >   \n> > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > index c20e05014fb9..b5849d4d401a 100644\n> > --- a/src/libcamera/camera.cpp\n> > +++ b/src/libcamera/camera.cpp\n> > @@ -688,7 +688,7 @@ void Camera::disconnect()\n> >   \tLOG(Camera, Debug) << \"Disconnecting camera \" << id();\n> >   \n> >   \t_d()->disconnect();\n> > -\tdisconnected.emit(this);\n> > +\tdisconnected.emit();\n> >   }\n> >   \n> >   int Camera::exportFrameBuffers(Stream *stream,\n> > diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp\n> > index ec59927eaf34..d12580505303 100644\n> > --- a/src/libcamera/device_enumerator.cpp\n> > +++ b/src/libcamera/device_enumerator.cpp\n> > @@ -288,7 +288,7 @@ void DeviceEnumerator::removeDevice(const std::string &deviceNode)\n> >   \tLOG(DeviceEnumerator, Debug)\n> >   \t\t<< \"Media device for node \" << deviceNode << \" removed.\";\n> >   \n> > -\tmedia->disconnected.emit(media.get());\n> > +\tmedia->disconnected.emit();\n> >   }\n> >   \n> >   /**\n> > diff --git a/src/libcamera/device_enumerator_udev.cpp b/src/libcamera/device_enumerator_udev.cpp\n> > index 37a2c5aa55db..5317afbd77ce 100644\n> > --- a/src/libcamera/device_enumerator_udev.cpp\n> > +++ b/src/libcamera/device_enumerator_udev.cpp\n> > @@ -327,7 +327,7 @@ int DeviceEnumeratorUdev::addV4L2Device(dev_t devnum)\n> >   \treturn 0;\n> >   }\n> >   \n> > -void DeviceEnumeratorUdev::udevNotify([[maybe_unused]] EventNotifier *notifier)\n> > +void DeviceEnumeratorUdev::udevNotify()\n> >   {\n> >   \tstruct udev_device *dev = udev_monitor_receive_device(monitor_);\n> >   \tstd::string action(udev_device_get_action(dev));\n> > diff --git a/src/libcamera/ipc_pipe_unixsocket.cpp b/src/libcamera/ipc_pipe_unixsocket.cpp\n> > index 38bcc30a21ed..533560cf95d3 100644\n> > --- a/src/libcamera/ipc_pipe_unixsocket.cpp\n> > +++ b/src/libcamera/ipc_pipe_unixsocket.cpp\n> > @@ -82,7 +82,7 @@ int IPCPipeUnixSocket::sendAsync(const IPCMessage &data)\n> >   \treturn 0;\n> >   }\n> >   \n> > -void IPCPipeUnixSocket::readyRead([[maybe_unused]] IPCUnixSocket *socket)\n> > +void IPCPipeUnixSocket::readyRead()\n> >   {\n> >   \tIPCUnixSocket::Payload payload;\n> >   \tint ret = socket_->receive(&payload);\n> > diff --git a/src/libcamera/ipc_unixsocket.cpp b/src/libcamera/ipc_unixsocket.cpp\n> > index 7188cf29e56a..bd32fca3a678 100644\n> > --- a/src/libcamera/ipc_unixsocket.cpp\n> > +++ b/src/libcamera/ipc_unixsocket.cpp\n> > @@ -311,7 +311,7 @@ int IPCUnixSocket::recvData(void *buffer, size_t length,\n> >   \treturn 0;\n> >   }\n> >   \n> > -void IPCUnixSocket::dataNotifier([[maybe_unused]] EventNotifier *notifier)\n> > +void IPCUnixSocket::dataNotifier()\n> >   {\n> >   \tint ret;\n> >   \n> > @@ -342,7 +342,7 @@ void IPCUnixSocket::dataNotifier([[maybe_unused]] EventNotifier *notifier)\n> >   \t\treturn;\n> >   \n> >   \tnotifier_->setEnabled(false);\n> > -\treadyRead.emit(this);\n> > +\treadyRead.emit();\n> >   }\n> >   \n> >   } /* namespace libcamera */\n> > diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\n> > index 597d4c6a578a..f69c4f03b80f 100644\n> > --- a/src/libcamera/pipeline_handler.cpp\n> > +++ b/src/libcamera/pipeline_handler.cpp\n> > @@ -448,7 +448,7 @@ void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)\n> >    */\n> >   void PipelineHandler::hotplugMediaDevice(MediaDevice *media)\n> >   {\n> > -\tmedia->disconnected.connect(this, &PipelineHandler::mediaDeviceDisconnected);\n> > +\tmedia->disconnected.connect(this, [=]() { mediaDeviceDisconnected(media); });\n> >   }\n> >   \n> >   /**\n> > diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp\n> > index 998d08c2d88a..eca1b30039b8 100644\n> > --- a/src/libcamera/process.cpp\n> > +++ b/src/libcamera/process.cpp\n> > @@ -66,7 +66,7 @@ void sigact(int signal, siginfo_t *info, void *ucontext)\n> >   \n> >   } /* namespace */\n> >   \n> > -void ProcessManager::sighandler([[maybe_unused]] EventNotifier *notifier)\n> > +void ProcessManager::sighandler()\n> >   {\n> >   \tchar data;\n> >   \tssize_t ret = read(pipe_[0], &data, sizeof(data));\n> > @@ -326,7 +326,7 @@ void Process::died(int wstatus)\n> >   \texitStatus_ = WIFEXITED(wstatus) ? NormalExit : SignalExit;\n> >   \texitCode_ = exitStatus_ == NormalExit ? WEXITSTATUS(wstatus) : -1;\n> >   \n> > -\tfinished.emit(this, exitStatus_, exitCode_);\n> > +\tfinished.emit(exitStatus_, exitCode_);\n> >   }\n> >   \n> >   /**\n> > diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n> > index 951592c698f7..9c783c9cbed1 100644\n> > --- a/src/libcamera/v4l2_device.cpp\n> > +++ b/src/libcamera/v4l2_device.cpp\n> > @@ -705,12 +705,11 @@ void V4L2Device::updateControls(ControlList *ctrls,\n> >   \n> >   /**\n> >    * \\brief Slot to handle V4L2 events from the V4L2 device\n> > - * \\param[in] notifier The event notifier\n> >    *\n> >    * When this slot is called, a V4L2 event is available to be dequeued from the\n> >    * device.\n> >    */\n> > -void V4L2Device::eventAvailable([[maybe_unused]] EventNotifier *notifier)\n> > +void V4L2Device::eventAvailable()\n> >   {\n> >   \tstruct v4l2_event event{};\n> >   \tint ret = ioctl(VIDIOC_DQEVENT, &event);\n> > diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\n> > index ce60dff6cdfd..1684d0e9c8dd 100644\n> > --- a/src/libcamera/v4l2_videodevice.cpp\n> > +++ b/src/libcamera/v4l2_videodevice.cpp\n> > @@ -1467,7 +1467,6 @@ int V4L2VideoDevice::queueBuffer(FrameBuffer *buffer)\n> >   \n> >   /**\n> >    * \\brief Slot to handle completed buffer events from the V4L2 video device\n> > - * \\param[in] notifier The event notifier\n> >    *\n> >    * When this slot is called, a Buffer has become available from the device, and\n> >    * will be emitted through the bufferReady Signal.\n> > @@ -1475,7 +1474,7 @@ int V4L2VideoDevice::queueBuffer(FrameBuffer *buffer)\n> >    * For Capture video devices the FrameBuffer will contain valid data.\n> >    * For Output video devices the FrameBuffer can be considered empty.\n> >    */\n> > -void V4L2VideoDevice::bufferAvailable([[maybe_unused]] EventNotifier *notifier)\n> > +void V4L2VideoDevice::bufferAvailable()\n> >   {\n> >   \tFrameBuffer *buffer = dequeueBuffer();\n> >   \tif (!buffer)\n> > diff --git a/test/event-thread.cpp b/test/event-thread.cpp\n> > index 12021710ef41..ef8a52c3de55 100644\n> > --- a/test/event-thread.cpp\n> > +++ b/test/event-thread.cpp\n> > @@ -66,7 +66,7 @@ public:\n> >   \t}\n> >   \n> >   private:\n> > -\tvoid readReady([[maybe_unused]] EventNotifier *notifier)\n> > +\tvoid readReady()\n> >   \t{\n> >   \t\tsize_ = read(notifier_->fd(), data_, sizeof(data_));\n> >   \t\tnotified_ = true;\n> > diff --git a/test/event.cpp b/test/event.cpp\n> > index e338335c11e8..d4765eb14d12 100644\n> > --- a/test/event.cpp\n> > +++ b/test/event.cpp\n> > @@ -22,7 +22,7 @@ using namespace libcamera;\n> >   class EventTest : public Test\n> >   {\n> >   protected:\n> > -\tvoid readReady([[maybe_unused]] EventNotifier *notifier)\n> > +\tvoid readReady()\n> >   \t{\n> >   \t\tsize_ = read(notifier_->fd(), data_, sizeof(data_));\n> >   \t\tnotified_ = true;\n> > diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp\n> > index 0ee51f71fd87..43562e608506 100644\n> > --- a/test/ipa/ipa_interface_test.cpp\n> > +++ b/test/ipa/ipa_interface_test.cpp\n> > @@ -153,7 +153,7 @@ protected:\n> >   \t}\n> >   \n> >   private:\n> > -\tvoid readTrace([[maybe_unused]] EventNotifier *notifier)\n> > +\tvoid readTrace()\n> >   \t{\n> >   \t\tssize_t s = read(notifier_->fd(), &trace_, sizeof(trace_));\n> >   \t\tif (s < 0) {\n> > diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp\n> > index 6507fb12d74b..7270bf4d2fe7 100644\n> > --- a/test/ipc/unixsocket.cpp\n> > +++ b/test/ipc/unixsocket.cpp\n> > @@ -68,7 +68,7 @@ public:\n> >   \t}\n> >   \n> >   private:\n> > -\tvoid readyRead([[maybe_unused]] IPCUnixSocket *ipc)\n> > +\tvoid readyRead()\n> >   \t{\n> >   \t\tIPCUnixSocket::Payload message, response;\n> >   \t\tint ret;\n> > @@ -447,7 +447,7 @@ private:\n> >   \t\treturn 0;\n> >   \t}\n> >   \n> > -\tvoid readyRead([[maybe_unused]] IPCUnixSocket *ipc)\n> > +\tvoid readyRead()\n> >   \t{\n> >   \t\tif (!callResponse_) {\n> >   \t\t\tcerr << \"Read ready without expecting data, fail.\" << endl;\n> > diff --git a/test/ipc/unixsocket_ipc.cpp b/test/ipc/unixsocket_ipc.cpp\n> > index 60317a4956b8..ab5d25572d83 100644\n> > --- a/test/ipc/unixsocket_ipc.cpp\n> > +++ b/test/ipc/unixsocket_ipc.cpp\n> > @@ -65,7 +65,7 @@ public:\n> >   \t}\n> >   \n> >   private:\n> > -\tvoid readyRead([[maybe_unused]] IPCUnixSocket *ipc)\n> > +\tvoid readyRead()\n> >   \t{\n> >   \t\tIPCUnixSocket::Payload message;\n> >   \t\tint ret;\n> > diff --git a/test/log/log_process.cpp b/test/log/log_process.cpp\n> > index d138aa7ff562..a56a399848a7 100644\n> > --- a/test/log/log_process.cpp\n> > +++ b/test/log/log_process.cpp\n> > @@ -126,8 +126,7 @@ protected:\n> >   \t}\n> >   \n> >   private:\n> > -\tvoid procFinished([[maybe_unused]] Process *proc,\n> > -\t\t\t  enum Process::ExitStatus exitStatus, int exitCode)\n> > +\tvoid procFinished(enum Process::ExitStatus exitStatus, int exitCode)\n> >   \t{\n> >   \t\texitStatus_ = exitStatus;\n> >   \t\texitCode_ = exitCode;\n> > diff --git a/test/process/process_test.cpp b/test/process/process_test.cpp\n> > index 8f7a1f05f681..378d680bf4ef 100644\n> > --- a/test/process/process_test.cpp\n> > +++ b/test/process/process_test.cpp\n> > @@ -81,8 +81,7 @@ protected:\n> >   \t}\n> >   \n> >   private:\n> > -\tvoid procFinished([[maybe_unused]] Process *proc,\n> > -\t\t\t  enum Process::ExitStatus exitStatus, int exitCode)\n> > +\tvoid procFinished(enum Process::ExitStatus exitStatus, int exitCode)\n> >   \t{\n> >   \t\texitStatus_ = exitStatus;\n> >   \t\texitCode_ = exitCode;\n> > diff --git a/test/timer-thread.cpp b/test/timer-thread.cpp\n> > index 2c14865b74d5..f7e8743da9e6 100644\n> > --- a/test/timer-thread.cpp\n> > +++ b/test/timer-thread.cpp\n> > @@ -39,7 +39,7 @@ public:\n> >   \t}\n> >   \n> >   private:\n> > -\tvoid timeoutHandler([[maybe_unused]] Timer *timer)\n> > +\tvoid timeoutHandler()\n> >   \t{\n> >   \t\ttimeout_ = true;\n> >   \t}\n> > diff --git a/test/timer.cpp b/test/timer.cpp\n> > index 88f226e79f5f..be79d0100a58 100644\n> > --- a/test/timer.cpp\n> > +++ b/test/timer.cpp\n> > @@ -56,7 +56,7 @@ public:\n> >   \t}\n> >   \n> >   private:\n> > -\tvoid timeoutHandler([[maybe_unused]] Timer *timer)\n> > +\tvoid timeoutHandler()\n> >   \t{\n> >   \t\texpiration_ = std::chrono::steady_clock::now();\n> >   \t\tcount_++;\n> > diff --git a/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl b/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl\n> > index b4cd1aa9e823..c54ecdb90a1a 100644\n> > --- a/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl\n> > +++ b/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl\n> > @@ -57,7 +57,7 @@ public:\n> >   \n> >   \t~{{proxy_worker_name}}() {}\n> >   \n> > -\tvoid readyRead([[maybe_unused]] IPCUnixSocket *socket)\n> > +\tvoid readyRead()\n> >   \t{\n> >   \t\tIPCUnixSocket::Payload _message;\n> >   \t\tint _retRecv = socket_.receive(&_message);","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 D17F9BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 30 Aug 2021 12:56:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4A9A569166;\n\tMon, 30 Aug 2021 14:56:05 +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 22E4B60258\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 30 Aug 2021 14:56:03 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 94CE15A7;\n\tMon, 30 Aug 2021 14:56:02 +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=\"kcrmQDYO\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1630328162;\n\tbh=4O5I4Lq8CkAstP43wKEoxUIYmY6fEcmoAkYPshZ1XJs=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=kcrmQDYOQ3CDQ7h2Q8KtW1ijlJhzAbEPsBtTlgbMtNZleLKVcPw/YkOTVaARGXH9D\n\td5aTt47XqotZ725C5tjcstRyWXe+C4Jw958IVcwlmNFNdXUEMbua9Qvg7A0dOhNOgV\n\tQ5+U1UBBwjN4DFkiqB2euTjdDTwvLN0/9GuKqGLY=","Date":"Mon, 30 Aug 2021 15:55:49 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<YSzVVRTRWkZpDyuq@pendragon.ideasonboard.com>","References":"<20210827023829.5871-1-laurent.pinchart@ideasonboard.com>\n\t<20210827023829.5871-7-laurent.pinchart@ideasonboard.com>\n\t<3ccd11dd-37bc-badf-7471-cc118646ab3b@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<3ccd11dd-37bc-badf-7471-cc118646ab3b@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v1 6/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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]