Skip to content

Commit e00528a

Browse files
committed
udev: Fix memleak
According to manual: On success, udev_monitor_receive_device() returns a pointer to a newly referenced device that was received via the monitor. The caller is responsible to drop this reference when done. Signed-off-by: Mariusz Tkaczyk <[email protected]>
1 parent 2a63857 commit e00528a

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

udev.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,16 @@ enum udev_status udev_wait_for_events(int seconds)
147147
tv.tv_sec = seconds;
148148
tv.tv_usec = 0;
149149

150-
if (select(fd + 1, &readfds, NULL, NULL, &tv) > 0 && FD_ISSET(fd, &readfds))
151-
if (udev_monitor_receive_device(udev_monitor))
150+
if (select(fd + 1, &readfds, NULL, NULL, &tv) > 0 && FD_ISSET(fd, &readfds)) {
151+
struct udev_device *dev = udev_monitor_receive_device(udev_monitor);
152+
153+
if (dev) {
154+
udev_device_unref(dev);
152155
return UDEV_STATUS_SUCCESS; /* event detected */
156+
} else {
157+
return UDEV_STATUS_ERROR;
158+
}
159+
}
153160
return UDEV_STATUS_TIMEOUT;
154161
}
155162
#endif

0 commit comments

Comments
 (0)