]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
speed up restart speed of profiles
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 6 Sep 2011 17:53:29 +0000 (12:53 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 6 Sep 2011 17:53:29 +0000 (12:53 -0500)
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia.c

index b6df8170f3b9cc05ece3ec1e790f64023d71b1b7..4e8a0585bdae39cbac5885a5ba5901c4cb6cfd12 100644 (file)
@@ -251,6 +251,7 @@ typedef enum {
        PFLAG_LIBERAL_DTMF,
        PFLAG_AUTO_ASSIGN_PORT,
        PFLAG_AUTO_ASSIGN_TLS_PORT,
+       PFLAG_SHUTDOWN,
        /* No new flags below this line */
        PFLAG_MAX
 } PFLAGS;
index a24c795df1c40eed49ecd2edb6b25f61b65e0c22..6b5e18ec58dab16b996128282f29eaa23749388a 100644 (file)
@@ -959,6 +959,7 @@ static void our_sofia_event_callback(nua_event_t event,
                break;
        case nua_r_shutdown:
                if (status >= 200) {
+                       sofia_set_pflag(profile, PFLAG_SHUTDOWN);
                        su_root_break(profile->s_root);
                }
                break;
@@ -1955,9 +1956,17 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
        switch_thread_rwlock_wrlock(profile->rwlock);
        sofia_reg_unregister(profile);
        nua_shutdown(profile->nua);
-       su_root_run(profile->s_root);
 
+       sanity = 10;
+       while (!sofia_test_pflag(profile, PFLAG_SHUTDOWN)) {
+               su_root_step(profile->s_root, 1000);
+               if (!--sanity) {
+                       break;
+               }
+       }
+       
        sofia_clear_pflag_locked(profile, PFLAG_RUNNING);
+       sofia_clear_pflag_locked(profile, PFLAG_SHUTDOWN);
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Waiting for worker thread\n");
 
        switch_thread_join(&st, worker_thread);