From fc96573697fddabd951483b902caaa41adb31214 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 28 Dec 2021 23:33:28 +0200 Subject: v4l2: v4l2_compat_manager: Store V4L2CameraFile in mmaps_ The mmaps_ map stores a pointer to the V4L2CameraProxy to avoid increasing the reference count on the V4L2CameraFile shared pointer needlessly. While this provides a small optimization, it prevents accessing the V4L2CameraFile from the munmap() function which doesn't take an fd as argument. To prepare for improved debugging that will require access to V4L2CameraFile in munmap(), store the V4L2CameraFile pointer in mmaps_. Signed-off-by: Laurent Pinchart Reviewed-by: Kieran Bingham Reviewed-by: Paul Elder --- src/v4l2/v4l2_compat_manager.cpp | 10 +++------- src/v4l2/v4l2_compat_manager.h | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) (limited to 'src/v4l2') diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp index 585046e9..ded568be 100644 --- a/src/v4l2/v4l2_compat_manager.cpp +++ b/src/v4l2/v4l2_compat_manager.cpp @@ -198,11 +198,7 @@ void *V4L2CompatManager::mmap(void *addr, size_t length, int prot, int flags, if (map == MAP_FAILED) return map; - /* - * Map to V4L2CameraProxy directly to prevent adding more references - * to V4L2CameraFile. - */ - mmaps_[map] = file->proxy(); + mmaps_[map] = file; return map; } @@ -212,9 +208,9 @@ int V4L2CompatManager::munmap(void *addr, size_t length) if (device == mmaps_.end()) return fops_.munmap(addr, length); - V4L2CameraProxy *proxy = device->second; + V4L2CameraFile *file = device->second.get(); - int ret = proxy->munmap(addr, length); + int ret = file->proxy()->munmap(addr, length); if (ret < 0) return ret; diff --git a/src/v4l2/v4l2_compat_manager.h b/src/v4l2/v4l2_compat_manager.h index f52069f7..64af9a8c 100644 --- a/src/v4l2/v4l2_compat_manager.h +++ b/src/v4l2/v4l2_compat_manager.h @@ -65,5 +65,5 @@ private: std::vector> proxies_; std::map> files_; - std::map mmaps_; + std::map> mmaps_; }; -- cgit v1.2.1