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 <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
This commit is contained in:
parent
c006f96485
commit
fc96573697
2 changed files with 4 additions and 8 deletions
|
@ -198,11 +198,7 @@ void *V4L2CompatManager::mmap(void *addr, size_t length, int prot, int flags,
|
||||||
if (map == MAP_FAILED)
|
if (map == MAP_FAILED)
|
||||||
return map;
|
return map;
|
||||||
|
|
||||||
/*
|
mmaps_[map] = file;
|
||||||
* Map to V4L2CameraProxy directly to prevent adding more references
|
|
||||||
* to V4L2CameraFile.
|
|
||||||
*/
|
|
||||||
mmaps_[map] = file->proxy();
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,9 +208,9 @@ int V4L2CompatManager::munmap(void *addr, size_t length)
|
||||||
if (device == mmaps_.end())
|
if (device == mmaps_.end())
|
||||||
return fops_.munmap(addr, length);
|
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)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -65,5 +65,5 @@ private:
|
||||||
|
|
||||||
std::vector<std::unique_ptr<V4L2CameraProxy>> proxies_;
|
std::vector<std::unique_ptr<V4L2CameraProxy>> proxies_;
|
||||||
std::map<int, std::shared_ptr<V4L2CameraFile>> files_;
|
std::map<int, std::shared_ptr<V4L2CameraFile>> files_;
|
||||||
std::map<void *, V4L2CameraProxy *> mmaps_;
|
std::map<void *, std::shared_ptr<V4L2CameraFile>> mmaps_;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue