提交 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
- to make sure the port is returned to FS. thx to Peter Olsson.
fix issues with Progress message type if pre_answer enabled
......
/*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2011, Anthony Minessale II <anthm@freeswitch.org>
* H323 endpoint interface for Freeswitch Modular Media Switching Software Library /
* Soft-Switch Application
*
* 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
* 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
......@@ -14,6 +17,11 @@
* for the specific language governing rights and limitations under the
* License.
*
* Contributor(s):
*
*
*
*
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
*
* The Initial Developer of the Original Code is
......@@ -24,7 +32,7 @@
*
* mod_h323.cpp -- H323 endpoint
*
* Version 0.0.56
* Version 0.0.57
*/
//#define DEBUG_RTP_PACKETS
......@@ -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));
tech_pvt->me = this;
tech_pvt->active_connection = true;
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));
......@@ -748,8 +757,9 @@ FSH323Connection::~FSH323Connection()
} else if (m_RTPlocalPort) {
switch_rtp_release_port((const char *)m_RTPlocalIP.AsString(), m_RTPlocalPort);
}
tech_pvt->me = NULL;
tech_pvt->active_connection = false;
// switch_mutex_unlock(tech_pvt->h323_mutex);
// 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)
switch_mutex_lock(tech_pvt->h323_mutex);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n");
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;
}
/*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2011, Anthony Minessale II <anthm@freeswitch.org>
* H323 endpoint interface for Freeswitch Modular Media Switching Software Library /
* Soft-Switch Application
*
* 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
* 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
......@@ -14,6 +17,11 @@
* for the specific language governing rights and limitations under the
* License.
*
* Contributor(s):
*
*
*
*
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
*
* The Initial Developer of the Original Code is
......@@ -24,7 +32,8 @@
*
* mod_h323.h -- H323 endpoint
*
*/
* Version 0.0.57
*/
#if defined(__GNUC__) && defined(HAVE_VISIBILITY)
#pragma GCC visibility push(default)
......@@ -184,6 +193,7 @@ typedef struct {
switch_mutex_t *h323_io_mutex;
FSH323Connection *me;
bool active_connection;
char *token;
} h323_private_t;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论