[libcamera-devel] [PATCH v2 0/3] Add Object::deleteLater() support

Umang Jain email at uajain.com
Fri Jul 31 12:53:41 CEST 2020


Implementation of Object::deleteLater() which ensures shared objects
are deleted in the thread to which they belong. This fixes the issue
where on hot-unplug, the Camera object is deleted in QCam's application
thread instead of CameraManager's thread and triggering the ASSERT()
in processNotifier (since the event notifier got deleted out of 
context in a different thread). See [1] for discussion.

[1] https://lists.libcamera.org/pipermail/libcamera-devel/2020-July/010951.html

Changes in v2:
  - Extend Thread::setEventDispatcher to selectively deliver messages
    - This will help if we want to explicitly deliver some messages if
      event loop is not running.
  - Include Object::deleteLater() unit test
    - One \todo here as one case pending to cover; multiple
      deleteLater() should only delete the object once.
  - Review comments (mostly documentation fixes).

Umang Jain (3):
  libcamera: thread: Support selective message dispatch to thread
  libcamera: object: Add deleteLater() support
  libcamera: camera: Ensure deletion via deleteLater()

 include/libcamera/camera.h              |   3 +-
 include/libcamera/internal/message.h    |   2 +
 include/libcamera/internal/thread.h     |   3 +-
 include/libcamera/object.h              |   2 +
 src/libcamera/camera.cpp                |   2 +-
 src/libcamera/camera_manager.cpp        |   6 +-
 src/libcamera/event_dispatcher_poll.cpp |   2 +-
 src/libcamera/message.cpp               |   4 +
 src/libcamera/object.cpp                |  48 +++++++++
 src/libcamera/thread.cpp                |  47 ++++++---
 test/meson.build                        |   1 +
 test/object-delete.cpp                  | 125 ++++++++++++++++++++++++
 12 files changed, 227 insertions(+), 18 deletions(-)
 create mode 100644 test/object-delete.cpp

-- 
2.26.2



More information about the libcamera-devel mailing list