Author: anthm Date: Mon May 14 22:21:53 2007 New Revision: 5183 Modified: freeswitch/trunk/src/include/switch_core.h freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c freeswitch/trunk/src/switch_ivr_bridge.c Log: fix locking bug Modified: freeswitch/trunk/src/include/switch_core.h ============================================================================== --- freeswitch/trunk/src/include/switch_core.h (original) +++ freeswitch/trunk/src/include/switch_core.h Mon May 14 22:21:53 2007 @@ -491,7 +491,7 @@ SWITCH_DECLARE(char *) switch_core_get_uuid(void); #ifdef SWITCH_DEBUG_RWLOCKS -SWITCH_DECLARE(switch_core_session_t *) switch_core_session_perform_locate(char *uuid_str, const char *file, const char *func, int line); +SWITCH_DECLARE(switch_core_session_t *) switch_core_session_perform_locate(const char *uuid_str, const char *file, const char *func, int line); #endif /*! Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Mon May 14 22:21:53 2007 @@ -575,7 +575,7 @@ stream->write_function(stream, "-Error Cannot locate session!\n"); return SWITCH_STATUS_SUCCESS; } - + if (switch_strlen_zero(action) || switch_strlen_zero(path)) { goto usage; } @@ -594,11 +594,11 @@ stream->write_function(stream, "USAGE: %s\n", session_record_api_interface.syntax); switch_safe_free(mycmd); - return SWITCH_STATUS_SUCCESS; + done: - if (session) { + if (rsession) { switch_core_session_rwunlock(rsession); } Modified: freeswitch/trunk/src/switch_ivr_bridge.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_bridge.c (original) +++ freeswitch/trunk/src/switch_ivr_bridge.c Mon May 14 22:21:53 2007 @@ -644,14 +644,14 @@ switch_channel_set_state_flag(originator_channel, CF_TRANSFER); switch_channel_set_state_flag(originatee_channel, CF_TRANSFER); - /* release the read locks we have on the channels */ - switch_core_session_rwunlock(originator_session); - switch_core_session_rwunlock(originatee_session); - /* change the states and let the chips fall where they may */ switch_channel_set_state(originator_channel, CS_TRANSMIT); switch_channel_set_state(originatee_channel, CS_TRANSMIT); + /* release the read locks we have on the channels */ + switch_core_session_rwunlock(originator_session); + switch_core_session_rwunlock(originatee_session); + status = SWITCH_STATUS_SUCCESS; while (switch_channel_get_state(originatee_channel) < CS_HANGUP && switch_channel_test_flag(originatee_channel, CF_TAGGED)) {