static void mrcp_sofia_on_session_terminate(
						int                   status,
						mrcp_sofia_agent_t   *sofia_agent,
						nua_handle_t         *nh,
						mrcp_sofia_session_t *sofia_session,
						sip_t const          *sip,
						tagi_t                tags[])
{
	mrcp_session_t *session = sofia_session->session;
	if(session) {
		apt_bool_t terminate_requested;
	
		apr_thread_mutex_lock(sofia_session->mutex);
		terminate_requested = sofia_session->terminate_requested;
		session = sofia_session->session;
		mrcp_sofia_session_unref(sofia_session);
		apr_thread_mutex_unlock(sofia_session->mutex);

		if(terminate_requested == TRUE) {
			mrcp_sofia_session_destroy(sofia_session);
			mrcp_session_terminate_response(session);
		}
		else {
			mrcp_session_terminate_event(session);
		}
	}
}
static void mrcp_sofia_on_session_terminate(
						int                   status,
						mrcp_sofia_agent_t   *sofia_agent,
						nua_handle_t         *nh,
						mrcp_sofia_session_t *sofia_session,
						sip_t const          *sip,
						tagi_t                tags[])
{
	mrcp_session_t *session;
	apt_bool_t terminate_requested;

	apr_thread_mutex_lock(sofia_session->mutex);
	terminate_requested = sofia_session->terminate_requested;
	session = sofia_session->session;
	mrcp_sofia_session_unref(sofia_session);
	apr_thread_mutex_unlock(sofia_session->mutex);

	if(terminate_requested == TRUE) {
		mrcp_sofia_session_cleanup(sofia_session);
		mrcp_session_terminate_response(session);
		return;
	}

	if(sofia_session->nua_state == nua_callstate_ready) {
		mrcp_session_terminate_event(session);
	}
	else {
		mrcp_session_descriptor_t *descriptor = mrcp_session_descriptor_create(session->pool);
		descriptor->response_code = status;
		mrcp_session_answer(session,descriptor);
	}
}