提交 c22aac0e authored 作者: Georgiewskiy Yuriy's avatar Georgiewskiy Yuriy

fix race condition on destroying signaling thread in h323 library

上级 6fbfff0f
fix race condition on destroying signaling thread in h323 library
Adds an extra switch_rtp_destroy or switch_rtp_release_port when a session ends Adds an extra switch_rtp_destroy or switch_rtp_release_port when a session ends
- to make sure the port is returned to FS. thx to Peter Olsson. - to make sure the port is returned to FS. thx to Peter Olsson.
fix issues with Progress message type if pre_answer enabled fix issues with Progress message type if pre_answer enabled
......
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * H323 endpoint interface for Freeswitch Modular Media Switching Software Library /
* Copyright (C) 2005-2011, Anthony Minessale II <anthm@freeswitch.org> * Soft-Switch Application
* *
* Version: MPL 1.1 * Version: MPL 1.1
* *
* Copyright (c) 2010 Ilnitskiy Mixim (max.h323@gmail.com)
* Copyright (c) 2010 Georgiewskiy Yuriy (bottleman@icf.org.ru)
*
* The contents of this file are subject to the Mozilla Public License Version * The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with * 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at * the License. You may obtain a copy of the License at
...@@ -14,6 +17,11 @@ ...@@ -14,6 +17,11 @@
* for the specific language governing rights and limitations under the * for the specific language governing rights and limitations under the
* License. * License.
* *
* Contributor(s):
*
*
*
*
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* *
* The Initial Developer of the Original Code is * The Initial Developer of the Original Code is
...@@ -24,7 +32,7 @@ ...@@ -24,7 +32,7 @@
* *
* mod_h323.cpp -- H323 endpoint * mod_h323.cpp -- H323 endpoint
* *
* Version 0.0.56 * Version 0.0.57
*/ */
//#define DEBUG_RTP_PACKETS //#define DEBUG_RTP_PACKETS
...@@ -708,6 +716,7 @@ FSH323Connection::FSH323Connection(FSH323EndPoint& endpoint, H323Transport* tran ...@@ -708,6 +716,7 @@ FSH323Connection::FSH323Connection(FSH323EndPoint& endpoint, H323Transport* tran
h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_alloc(m_fsSession, sizeof(*tech_pvt)); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_alloc(m_fsSession, sizeof(*tech_pvt));
tech_pvt->me = this; tech_pvt->me = this;
tech_pvt->active_connection = true;
switch_core_session_set_private(m_fsSession, tech_pvt); switch_core_session_set_private(m_fsSession, tech_pvt);
switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(m_fsSession)); switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(m_fsSession));
...@@ -750,6 +759,7 @@ FSH323Connection::~FSH323Connection() ...@@ -750,6 +759,7 @@ FSH323Connection::~FSH323Connection()
} }
tech_pvt->me = NULL; tech_pvt->me = NULL;
tech_pvt->active_connection = false;
// switch_mutex_unlock(tech_pvt->h323_mutex); // switch_mutex_unlock(tech_pvt->h323_mutex);
// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n");
} }
...@@ -2387,6 +2397,9 @@ static switch_status_t on_hangup(switch_core_session_t *session) ...@@ -2387,6 +2397,9 @@ static switch_status_t on_hangup(switch_core_session_t *session)
switch_mutex_lock(tech_pvt->h323_mutex); switch_mutex_lock(tech_pvt->h323_mutex);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n");
switch_mutex_unlock(tech_pvt->h323_mutex); switch_mutex_unlock(tech_pvt->h323_mutex);
while (tech_pvt->active_connection){
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Wait clear h323 connection\n");
h_timer(1);
}
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * H323 endpoint interface for Freeswitch Modular Media Switching Software Library /
* Copyright (C) 2005-2011, Anthony Minessale II <anthm@freeswitch.org> * Soft-Switch Application
* *
* Version: MPL 1.1 * Version: MPL 1.1
* *
* Copyright (c) 2010 Ilnitskiy Mixim (max.h323@gmail.com)
* Copyright (c) 2010 Georgiewskiy Yuriy (bottleman@icf.org.ru)
*
* The contents of this file are subject to the Mozilla Public License Version * The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with * 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at * the License. You may obtain a copy of the License at
...@@ -14,6 +17,11 @@ ...@@ -14,6 +17,11 @@
* for the specific language governing rights and limitations under the * for the specific language governing rights and limitations under the
* License. * License.
* *
* Contributor(s):
*
*
*
*
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* *
* The Initial Developer of the Original Code is * The Initial Developer of the Original Code is
...@@ -24,7 +32,8 @@ ...@@ -24,7 +32,8 @@
* *
* mod_h323.h -- H323 endpoint * mod_h323.h -- H323 endpoint
* *
*/ * Version 0.0.57
*/
#if defined(__GNUC__) && defined(HAVE_VISIBILITY) #if defined(__GNUC__) && defined(HAVE_VISIBILITY)
#pragma GCC visibility push(default) #pragma GCC visibility push(default)
...@@ -184,6 +193,7 @@ typedef struct { ...@@ -184,6 +193,7 @@ typedef struct {
switch_mutex_t *h323_io_mutex; switch_mutex_t *h323_io_mutex;
FSH323Connection *me; FSH323Connection *me;
bool active_connection;
char *token; char *token;
} h323_private_t; } h323_private_t;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论