Send a "call_hangup" to outbound/handlecall sessions when the relevant channel is hungup

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12635 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Andrew Thompson 2009-03-16 23:31:55 +00:00
parent 8928727293
commit 3eba7e3602
1 changed files with 9 additions and 4 deletions

View File

@ -524,6 +524,7 @@ static switch_status_t check_attached_sessions(listener_t *listener)
switch_mutex_lock(listener->sock_mutex); switch_mutex_lock(listener->sock_mutex);
ei_sendto(listener->ec, listener->sockfd, &sp->process, &ebuf); ei_sendto(listener->ec, listener->sockfd, &sp->process, &ebuf);
switch_mutex_unlock(listener->sock_mutex); switch_mutex_unlock(listener->sock_mutex);
ei_x_free(&ebuf);
/* event is a hangup, so this session can be removed */ /* event is a hangup, so this session can be removed */
if (pevent->event_id == SWITCH_EVENT_CHANNEL_HANGUP) { if (pevent->event_id == SWITCH_EVENT_CHANNEL_HANGUP) {
@ -535,20 +536,24 @@ static switch_status_t check_attached_sessions(listener_t *listener)
else else
listener->session_list = sp->next; listener->session_list = sp->next;
switch_channel_clear_flag(switch_core_session_get_channel(sp->session), CF_CONTROLLED); switch_channel_clear_flag(switch_core_session_get_channel(sp->session), CF_CONTROLLED);
/* this allows the application threads to exit */ /* this allows the application threads to exit */
switch_clear_flag_locked(sp, LFLAG_SESSION_ALIVE); switch_clear_flag_locked(sp, LFLAG_SESSION_ALIVE);
switch_core_session_rwunlock(sp->session); switch_core_session_rwunlock(sp->session);
removed = 1; removed = 1;
ei_x_new_with_version(&ebuf);
ei_x_encode_atom(&ebuf, "call_hangup");
switch_mutex_lock(listener->sock_mutex);
ei_sendto(listener->ec, listener->sockfd, &sp->process, &ebuf);
switch_mutex_unlock(listener->sock_mutex);
ei_x_free(&ebuf);
/* TODO /* TODO
if this listener was created outbound, and the last session has been detached if this listener was created outbound, and the last session has been detached
should the listener also exit? Does it matter? should the listener also exit? Does it matter?
*/ */
} }
ei_x_free(&ebuf);
switch_event_destroy(&pevent); switch_event_destroy(&pevent);
} }
if (!removed) if (!removed)