[libcamera-devel] [PATCH 3/4] libcamera: device_enumerator_udev: Avoid double list lookup

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Sep 12 22:03:29 CEST 2019


DeviceEnumeratorUdev::populateMediaDevice() searches for orphan devices
in an std::list, and if found removes them using std::list::remove().
This ends up looking up the entry twice. Replace the remove() call with
erase() to fix it.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/libcamera/device_enumerator_udev.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/libcamera/device_enumerator_udev.cpp b/src/libcamera/device_enumerator_udev.cpp
index 210f5c1f2870..c40770911d3d 100644
--- a/src/libcamera/device_enumerator_udev.cpp
+++ b/src/libcamera/device_enumerator_udev.cpp
@@ -182,7 +182,8 @@ int DeviceEnumeratorUdev::populateMediaDevice(const std::shared_ptr<MediaDevice>
 				       entity->deviceMinor());
 
 		/* Take device from orphan list first, if it is in the list. */
-		if (std::find(orphans_.begin(), orphans_.end(), devnum) != orphans_.end()) {
+		auto orphan = std::find(orphans_.begin(), orphans_.end(), devnum);
+		if (orphan != orphans_.end()) {
 			std::string deviceNode = lookupDeviceNode(devnum);
 			if (deviceNode.empty())
 				return -EINVAL;
@@ -191,7 +192,7 @@ int DeviceEnumeratorUdev::populateMediaDevice(const std::shared_ptr<MediaDevice>
 			if (ret)
 				return ret;
 
-			orphans_.remove(devnum);
+			orphans_.erase(orphan);
 			continue;
 		}
 
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list