diff options
author | jeremy <jeremy@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-01-13 03:07:15 +0000 |
---|---|---|
committer | jeremy <jeremy@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-01-13 03:07:15 +0000 |
commit | 8270caac975706bb0d9ed35365bf5cdec8d6eafc (patch) | |
tree | 653574342cc54642691b186821ad1fed9e1c9e9f /channels/chan_h323.c | |
parent | 50805a18f7706a53fd0ba83bca9d32f507500448 (diff) |
Fix it so we can be unloaded/loaded at will
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2003 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_h323.c')
-rwxr-xr-x | channels/chan_h323.c | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/channels/chan_h323.c b/channels/chan_h323.c index 1b5720a5c..d7d3dfb16 100755 --- a/channels/chan_h323.c +++ b/channels/chan_h323.c @@ -1270,7 +1270,7 @@ static int restart_monitor(void) ast_log(LOG_WARNING, "Cannot kill myself\n"); return -1; } - if (monitor_thread) { + if (monitor_thread && (monitor_thread != -2)) { /* Wake up the thread */ pthread_kill(monitor_thread, SIGURG); } else { @@ -1786,11 +1786,12 @@ int load_module() /* Register our callback functions */ h323_callback_register(setup_incoming_call, - setup_outgoing_call, - create_connection, - setup_rtp_connection, - cleanup_connection, - connection_made, send_digit); + setup_outgoing_call, + create_connection, + setup_rtp_connection, + cleanup_connection, + connection_made, + send_digit); /* start the h.323 listener */ @@ -1833,6 +1834,19 @@ int unload_module() ast_log(LOG_WARNING, "Unable to lock the interface list\n"); return -1; } + + if (!ast_mutex_lock(&monlock)) { + if (monitor_thread && (monitor_thread != -2)) { + pthread_cancel(monitor_thread); + pthread_kill(monitor_thread, SIGURG); + pthread_join(monitor_thread, NULL); + } + monitor_thread = (pthread_t) -2; + ast_mutex_unlock(&monlock); + } else { + ast_log(LOG_WARNING, "Unable to lock the monitor\n"); + return -1; + } if (!ast_mutex_lock(&iflock)) { /* destroy all the interfaces and free their memory */ @@ -1856,13 +1870,15 @@ int unload_module() ast_rtp_proto_unregister(&oh323_rtp); /* unregister commands */ - ast_cli_unregister(&cli_debug); - ast_cli_unregister(&cli_no_debug); - ast_cli_unregister(&cli_trace); - ast_cli_unregister(&cli_no_trace); - ast_cli_unregister(&cli_show_codecs); - ast_cli_unregister(&cli_gk_cycle); - + ast_cli_unregister(&cli_debug); + ast_cli_unregister(&cli_no_debug); + ast_cli_unregister(&cli_trace); + ast_cli_unregister(&cli_no_trace); + ast_cli_unregister(&cli_show_codecs); +// ast_cli_unregister(&cli_gk_cycle); + ast_cli_unregister(&cli_hangup_call); + ast_cli_unregister(&cli_show_tokens); + /* unregister channel type */ ast_channel_unregister(type); |