diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-10-08 09:38:46 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-10-08 09:38:46 +0200 |
commit | c9d22a655ad58724d0e8916e63ec2c0631d8331d (patch) | |
tree | 93b07ca1767e24f1722cd51013a96400b8838c04 | |
parent | 7f216537866b77b749df2c03e040e12690b8d497 (diff) |
core: don't wait forever to get all modems disabled and removed
Just in case, put a maximum time to wait for all modems to get disabled and
removed, as we don't want to wait forever.
-rw-r--r-- | src/main.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -33,6 +33,9 @@ # define MM_DIST_VERSION VERSION #endif +/* Maximum time to wait for all modems to get disabled and removed */ +#define MAX_SHUTDOWN_TIME_SECS 20 + static GMainLoop *loop; static MMManager *manager; @@ -154,17 +157,29 @@ main (int argc, char *argv[]) g_main_loop_run (loop); if (manager) { + GTimer *timer; + mm_manager_shutdown (manager); - /* Wait for all modems to be removed */ - while (mm_manager_num_modems (manager)) { + /* Wait for all modems to be disabled and removed, but don't wait + * forever: if disabling the modems takes longer than 20s, just + * shutdown anyway. */ + timer = g_timer_new (); + while (mm_manager_num_modems (manager) && + g_timer_elapsed (timer, NULL) < (gdouble)MAX_SHUTDOWN_TIME_SECS) { GMainContext *ctx = g_main_loop_get_context (loop); g_main_context_iteration (ctx, FALSE); g_usleep (50); } + if (mm_manager_num_modems (manager)) + mm_warn ("Disabling modems took too long, " + "shutting down with '%u' modems around", + mm_manager_num_modems (manager)); + g_object_unref (manager); + g_timer_destroy (timer); } g_bus_unown_name (name_id); |