From cfe1cac7f9ce8fee3f8bdf8266ae41f67f66d816 Mon Sep 17 00:00:00 2001 From: Pawel Wieczorkiewicz Date: Tue, 18 Nov 2014 13:13:50 +0100 Subject: [PATCH] nanny: unregister all devices on exit --- nanny/main.c | 2 ++ nanny/nanny.c | 14 ++++++++++++++ nanny/nanny.h | 1 + 3 files changed, 17 insertions(+) diff --git a/nanny/main.c b/nanny/main.c index 4ba0831fb..d668f8096 100644 --- a/nanny/main.c +++ b/nanny/main.c @@ -303,6 +303,7 @@ babysit(void) ni_fatal("ni_socket_wait failed"); } + ni_nanny_unregister_all(mgr); ni_dbus_client_free(client); ni_dbus_server_free(mgr->server); ni_server_deactivate_interface_events(); @@ -310,6 +311,7 @@ babysit(void) ni_dbus_objects_garbage_collect(); ni_socket_deactivate_all(); + exit(0); } diff --git a/nanny/nanny.c b/nanny/nanny.c index ae682d2e2..693359f50 100644 --- a/nanny/nanny.c +++ b/nanny/nanny.c @@ -583,6 +583,20 @@ ni_nanny_unregister_device(ni_nanny_t *mgr, ni_ifworker_t *w) ni_fsm_destroy_worker(mgr->fsm, w); } +void +ni_nanny_unregister_all(ni_nanny_t *mgr) +{ + unsigned int i; + + if (mgr) { + for (i = 0; i < mgr->fsm->workers.count; i++) { + ni_ifworker_t *w = mgr->fsm->workers.data[i]; + + ni_nanny_unregister_device(mgr, w); + } + } +} + /* * Handle prompting */ diff --git a/nanny/nanny.h b/nanny/nanny.h index 63c597d60..2a90717dd 100644 --- a/nanny/nanny.h +++ b/nanny/nanny.h @@ -122,6 +122,7 @@ extern unsigned int ni_nanny_recheck_do(ni_nanny_t *mgr); extern unsigned int ni_nanny_down_do(ni_nanny_t *mgr); extern void ni_nanny_register_device(ni_nanny_t *, ni_ifworker_t *); extern void ni_nanny_unregister_device(ni_nanny_t *, ni_ifworker_t *); +extern void ni_nanny_unregister_all(ni_nanny_t *); extern ni_managed_device_t * ni_nanny_get_device(ni_nanny_t *, ni_ifworker_t *); extern void ni_nanny_remove_device(ni_nanny_t *, ni_managed_device_t *); extern ni_managed_policy_t * ni_nanny_get_policy(ni_nanny_t *, const ni_fsm_policy_t *);