diff options
author | Joshua Colp <jcolp@digium.com> | 2016-04-19 09:40:42 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2016-04-19 09:40:42 -0500 |
commit | a048a0ffbdce32e62e9a05b66b3931c964e23ed2 (patch) | |
tree | 25c0d4af5c490999c26e88707f3a2c09c24cfea3 /res/res_pjsip_transport_management.c | |
parent | c922846c6da3f1d76e41a574842ad740bfec27a1 (diff) | |
parent | 49bfdc9ac029e0ef17cd8e85d8d7b7731387a34e (diff) |
Merge "res_pjsip_transport_management: Allow unload to occur." into 13
Diffstat (limited to 'res/res_pjsip_transport_management.c')
-rw-r--r-- | res/res_pjsip_transport_management.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/res/res_pjsip_transport_management.c b/res/res_pjsip_transport_management.c index eb0240438..afd94eb1f 100644 --- a/res/res_pjsip_transport_management.c +++ b/res/res_pjsip_transport_management.c @@ -24,6 +24,8 @@ #include "asterisk.h" +#include <signal.h> + #include <pjsip.h> #include <pjsip_ua.h> @@ -93,7 +95,7 @@ static void *keepalive_transport_thread(void *data) /* Once loaded this module just keeps on going as it is unsafe to stop and change the underlying * callback for the transport manager. */ - while (1) { + while (keepalive_interval) { sleep(keepalive_interval); ao2_callback(transports, OBJ_NODATA, keepalive_transport_cb, NULL); } @@ -347,7 +349,19 @@ static int load_module(void) static int unload_module(void) { - /* This will never get called */ + pjsip_tpmgr *tpmgr = pjsip_endpt_get_tpmgr(ast_sip_get_pjsip_endpoint()); + + if (keepalive_interval) { + keepalive_interval = 0; + pthread_kill(keepalive_thread, SIGURG); + pthread_join(keepalive_thread, NULL); + } + + ast_sched_context_destroy(sched); + ao2_ref(transports, -1); + + ast_sip_unregister_service(&idle_monitor_module); + pjsip_tpmgr_set_state_cb(tpmgr, tpmgr_state_callback); return 0; } |