diff --git a/src/dbus.c b/src/dbus.c index da92c015..4c21b0b7 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -31,6 +31,7 @@ #include #include "src/dbus.h" #include "src/agent.h" +#include "src/iwd.h" struct l_dbus *g_dbus = 0; @@ -196,7 +197,7 @@ static void ready_callback(void *user_data) static void disconnect_callback(void *user_data) { l_info("D-Bus disconnected, quitting..."); - l_main_quit(); + iwd_shutdown(); } struct l_dbus *dbus_get_bus(void) diff --git a/src/iwd.h b/src/iwd.h index 1faafe34..1492a0e4 100644 --- a/src/iwd.h +++ b/src/iwd.h @@ -36,3 +36,5 @@ typedef void (*iwd_device_foreach_func)(struct device *, void *data); void __iwd_device_foreach(iwd_device_foreach_func func, void *user_data); const struct l_settings *iwd_get_config(void); + +void iwd_shutdown(void); diff --git a/src/main.c b/src/main.c index 7ec40f9a..b21413cc 100644 --- a/src/main.c +++ b/src/main.c @@ -59,6 +59,14 @@ static void main_loop_quit(struct l_timeout *timeout, void *user_data) l_main_quit(); } +void iwd_shutdown(void) +{ + dbus_shutdown(); + netdev_shutdown(); + + timeout = l_timeout_create(1, main_loop_quit, NULL, NULL); +} + static void signal_handler(struct l_signal *signal, uint32_t signo, void *user_data) { @@ -66,11 +74,7 @@ static void signal_handler(struct l_signal *signal, uint32_t signo, case SIGINT: case SIGTERM: l_info("Terminate"); - - dbus_shutdown(); - netdev_shutdown(); - - timeout = l_timeout_create(1, main_loop_quit, NULL, NULL); + iwd_shutdown(); break; } }