- while (!set_isempty(settle_set)) {
- int fdcount;
- struct epoll_event ev[4];
- int i;
-
- fdcount = epoll_wait(fd_ep, ev, ELEMENTSOF(ev), -1);
- if (fdcount < 0) {
- if (errno != EINTR)
- log_error_errno(errno, "Failed to receive uevent message: %m");
- continue;
- }
-
- for (i = 0; i < fdcount; i++) {
- _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
- const char *syspath;
-
- if (!(ev[i].data.fd == fd_monitor && ev[i].events & EPOLLIN))
- continue;
-
- if (device_monitor_receive_device(m, &dev) <= 0)
- continue;
-
- if (sd_device_get_syspath(dev, &syspath) < 0)
- continue;
-
- if (arg_verbose)
- printf("settle %s\n", syspath);
-
- if (!set_remove(settle_set, syspath))
- log_debug("Got epoll event on syspath %s not present in syspath set", syspath);
- }
+ if (event && !set_isempty(settle_set)) {
+ r = sd_event_loop(event);
+ if (r < 0)
+ return log_error_errno(r, "Event loop failed: %m");