From c22aac0eac05300681354b2874e87a5fa05bd1a0 Mon Sep 17 00:00:00 2001 From: Georgiewskiy Yuriy Date: Fri, 22 Apr 2011 15:19:27 +0400 Subject: [PATCH] fix race condition on destroying signaling thread in h323 library --- src/mod/endpoints/mod_h323/changes.txt | 1 + src/mod/endpoints/mod_h323/mod_h323.cpp | 23 ++++++++++++++++++----- src/mod/endpoints/mod_h323/mod_h323.h | 16 +++++++++++++--- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/mod/endpoints/mod_h323/changes.txt b/src/mod/endpoints/mod_h323/changes.txt index 4f75aef8b4..3af956f0cb 100644 --- a/src/mod/endpoints/mod_h323/changes.txt +++ b/src/mod/endpoints/mod_h323/changes.txt @@ -1,3 +1,4 @@ +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 diff --git a/src/mod/endpoints/mod_h323/mod_h323.cpp b/src/mod/endpoints/mod_h323/mod_h323.cpp index 44295f618f..233e972e32 100644 --- a/src/mod/endpoints/mod_h323/mod_h323.cpp +++ b/src/mod/endpoints/mod_h323/mod_h323.cpp @@ -1,9 +1,12 @@ /* - * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * Copyright (C) 2005-2011, Anthony Minessale II + * 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; } diff --git a/src/mod/endpoints/mod_h323/mod_h323.h b/src/mod/endpoints/mod_h323/mod_h323.h index 5477f9aa59..3a0d7aa235 100644 --- a/src/mod/endpoints/mod_h323/mod_h323.h +++ b/src/mod/endpoints/mod_h323/mod_h323.h @@ -1,9 +1,12 @@ /* - * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * Copyright (C) 2005-2011, Anthony Minessale II + * 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;