[Freeswitch-svn] [commit] r12638 - freeswitch/trunk/src/mod/event_handlers/mod_erlang_event
FreeSWITCH SVN
andrew at freeswitch.org
Mon Mar 16 19:35:06 PDT 2009
Author: andrew
Date: Mon Mar 16 21:35:06 2009
New Revision: 12638
Log:
Cleanups/fixes while tracking down stuck channels
Modified:
freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/handle_msg.c
freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
Modified: freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/handle_msg.c
==============================================================================
--- freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/handle_msg.c (original)
+++ freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/handle_msg.c Mon Mar 16 21:35:06 2009
@@ -490,7 +490,7 @@
}
}
- /* release the lock returned by switch_core_session_locate */
+ /* release the lock returned by session locate */
switch_core_session_rwunlock(session);
} else {
@@ -579,7 +579,7 @@
ei_x_encode_atom(rbuf, "error");
ei_x_encode_atom(rbuf, "session_attach_failed");
}
- /* release the lock returned by switch_core_session_locate */
+ /* release the lock returned by session locate */
switch_core_session_rwunlock(session);
} else {
ei_x_encode_tuple_header(rbuf, 2);
Modified: freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
==============================================================================
--- freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c (original)
+++ freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c Mon Mar 16 21:35:06 2009
@@ -311,8 +311,6 @@
if (!session_element)
return;
- return;
-
switch_mutex_lock(listener->session_mutex);
for(s = listener->session_list; s; s = s->next) {
if (s == session_element) {
@@ -322,12 +320,12 @@
} else {
listener->session_list = s->next;
}
- if (!(session = switch_core_session_locate(session_element->uuid_str))) {
+ if ((session = switch_core_session_locate(session_element->uuid_str))) {
switch_channel_clear_flag(switch_core_session_get_channel(session), CF_CONTROLLED);
- /* this allows the application threads to exit */
- switch_clear_flag_locked(s, LFLAG_SESSION_ALIVE);
switch_core_session_rwunlock(session);
}
+ /* this allows the application threads to exit */
+ switch_clear_flag_locked(s, LFLAG_SESSION_ALIVE);
break;
}
last = s;
@@ -460,17 +458,20 @@
/* Send a message to the associated registered process to let it know there is a call.
Message is a tuple of the form {call, <call-event>}
*/
- if (!(session = switch_core_session_locate(session_element->uuid_str)))
- return SWITCH_STATUS_FALSE;
-
- channel = switch_core_session_get_channel(session);
- switch_core_session_rwunlock(session);
+
if (switch_event_create(&call_event, SWITCH_EVENT_CHANNEL_DATA) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
return SWITCH_STATUS_MEMERR;
}
+
+ if (!(session = switch_core_session_locate(session_element->uuid_str)))
+ return SWITCH_STATUS_FALSE;
+
+ channel = switch_core_session_get_channel(session);
+
switch_caller_profile_event_set_data(switch_channel_get_caller_profile(channel), "Channel", call_event);
switch_channel_event_set_data(channel, call_event);
+ switch_core_session_rwunlock(session);
switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "Content-Type", "command/reply");
switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "Reply-Text", "+OK\n");
@@ -538,11 +539,11 @@
switch_mutex_unlock(listener->sock_mutex);
ei_x_free(&ebuf);
- /* event is a hangup, so this session can be removed */
- if (pevent->event_id == SWITCH_EVENT_CHANNEL_HANGUP) {
+ /* event is a channel destroy, so this session can be removed */
+ if (pevent->event_id == SWITCH_EVENT_CHANNEL_DESTROY) {
switch_core_session_t *session;
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Hangup event for attached session for %s\n", sp->uuid_str);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Destroy event for attached session for %s\n", sp->uuid_str);
/* remove session from list */
if (last)
@@ -552,10 +553,10 @@
if ((session = switch_core_session_locate(sp->uuid_str))) {
switch_channel_clear_flag(switch_core_session_get_channel(session), CF_CONTROLLED);
- /* this allows the application threads to exit */
- switch_clear_flag_locked(sp, LFLAG_SESSION_ALIVE);
switch_core_session_rwunlock(session);
}
+ /* this allows the application threads to exit */
+ switch_clear_flag_locked(sp, LFLAG_SESSION_ALIVE);
removed = 1;
ei_x_new_with_version(&ebuf);
@@ -882,10 +883,10 @@
for (s = listener->session_list; s; s = s->next) {
if ((session = switch_core_session_locate(s->uuid_str))) {
switch_channel_clear_flag(switch_core_session_get_channel(session), CF_CONTROLLED);
- /* this allows the application threads to exit */
- switch_clear_flag_locked(s, LFLAG_SESSION_ALIVE);
switch_core_session_rwunlock(session);
}
+ /* this allows the application threads to exit */
+ switch_clear_flag_locked(s, LFLAG_SESSION_ALIVE);
}
switch_mutex_unlock(listener->session_mutex);
@@ -1148,7 +1149,6 @@
while (!(p = switch_core_hash_find(listener->spawn_pid_hash, hash)) || p == &globals.WAITING) {
if (i > 50) { /* half a second timeout */
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Timed out when waiting for outbound pid\n");
- /*switch_core_session_rwunlock(session);*/
remove_session_elem_from_listener(listener,session_element);
switch_core_hash_insert(listener->spawn_pid_hash, hash, &globals.TIMEOUT); /* TODO lock this? */
return NULL;
More information about the Freeswitch-svn
mailing list