udev_builtin_exit();
+ if (manager->pid == getpid_cached())
+ udev_ctrl_cleanup(manager->ctrl);
+
manager_clear_for_worker(manager);
sd_netlink_unref(manager->rtnl);
assert(dev);
/* only one process can add events to the queue */
- if (manager->pid == 0)
- manager->pid = getpid_cached();
-
assert(manager->pid == getpid_cached());
/* We only accepts devices received by device monitor. */
static int main_loop(Manager *manager) {
int fd_worker, r;
+ manager->pid = getpid_cached();
+
/* unnamed socket from workers to the main daemon */
r = socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, manager->worker_watch);
if (r < 0)
log_debug_errno(r, "Failed to adjust OOM score, ignoring: %m");
}
- r = main_loop(manager);
- /* FIXME: move this into manager_free() */
- udev_ctrl_cleanup(manager->ctrl);
- return r;
+ return main_loop(manager);
}
DEFINE_MAIN_FUNCTION(run);