summaryrefslogtreecommitdiff
path: root/src/udev
diff options
context:
space:
mode:
authorDaniel Mack <github@zonque.org>2015-07-01 13:42:16 -0400
committerDaniel Mack <github@zonque.org>2015-07-01 13:42:16 -0400
commitb6b34755339b7ce7181d0986f761ca2af3d5497e (patch)
tree0935118c26b6b039c39edb0e6d1f80849a19a1be /src/udev
parent78d3e041a57b0c790b7c0b01906d9eb19a031029 (diff)
parent077fc5e2602effd9b0f46d8ae95271de2b5f2997 (diff)
downloadsystemd-b6b34755339b7ce7181d0986f761ca2af3d5497e.tar.gz
systemd-b6b34755339b7ce7181d0986f761ca2af3d5497e.tar.bz2
systemd-b6b34755339b7ce7181d0986f761ca2af3d5497e.zip
Merge pull request #463 from dvdhrm/udev-run
udev: destroy manager before cleaning environment
Diffstat (limited to 'src/udev')
-rw-r--r--src/udev/udevd.c64
1 files changed, 36 insertions, 28 deletions
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 617bf2fe22..e27fb1fd9e 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -1608,8 +1608,42 @@ static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cg
return 0;
}
-int main(int argc, char *argv[]) {
+static int run(int fd_ctrl, int fd_uevent, const char *cgroup) {
_cleanup_(manager_freep) Manager *manager = NULL;
+ int r;
+
+ r = manager_new(&manager, fd_ctrl, fd_uevent, cgroup);
+ if (r < 0) {
+ r = log_error_errno(r, "failed to allocate manager object: %m");
+ goto exit;
+ }
+
+ r = udev_rules_apply_static_dev_perms(manager->rules);
+ if (r < 0)
+ log_error_errno(r, "failed to apply permissions on static device nodes: %m");
+
+ (void) sd_notify(false,
+ "READY=1\n"
+ "STATUS=Processing...");
+
+ r = sd_event_loop(manager->event);
+ if (r < 0) {
+ log_error_errno(r, "event loop failed: %m");
+ goto exit;
+ }
+
+ sd_event_get_exit_code(manager->event, &r);
+
+exit:
+ sd_notify(false,
+ "STOPPING=1\n"
+ "STATUS=Shutting down...");
+ if (manager)
+ udev_ctrl_cleanup(manager->ctrl);
+ return r;
+}
+
+int main(int argc, char *argv[]) {
_cleanup_free_ char *cgroup = NULL;
int r, fd_ctrl, fd_uevent;
@@ -1716,35 +1750,9 @@ int main(int argc, char *argv[]) {
write_string_file("/proc/self/oom_score_adj", "-1000");
}
- r = manager_new(&manager, fd_ctrl, fd_uevent, cgroup);
- if (r < 0) {
- r = log_error_errno(r, "failed to allocate manager object: %m");
- goto exit;
- }
-
- r = udev_rules_apply_static_dev_perms(manager->rules);
- if (r < 0)
- log_error_errno(r, "failed to apply permissions on static device nodes: %m");
-
- (void) sd_notify(false,
- "READY=1\n"
- "STATUS=Processing...");
-
- r = sd_event_loop(manager->event);
- if (r < 0) {
- log_error_errno(r, "event loop failed: %m");
- goto exit;
- }
-
- sd_event_get_exit_code(manager->event, &r);
+ r = run(fd_ctrl, fd_uevent, cgroup);
exit:
- sd_notify(false,
- "STOPPING=1\n"
- "STATUS=Shutting down...");
-
- if (manager)
- udev_ctrl_cleanup(manager->ctrl);
mac_selinux_finish();
log_close();
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;