From 235466d1967c946fac1df2f1f8ee747b2b8b7faf Mon Sep 17 00:00:00 2001
From: Brian West <brian@freeswitch.org>
Date: Mon, 6 Mar 2006 23:10:22 +0000
Subject: [PATCH] fix core

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@766 d0543943-73ff-0310-b7d9-9358b9ac24b2
---
 src/mod/applications/mod_echo/mod_echo.c | 22 +---------------------
 src/switch_core.c                        |  5 ++++-
 2 files changed, 5 insertions(+), 22 deletions(-)

diff --git a/src/mod/applications/mod_echo/mod_echo.c b/src/mod/applications/mod_echo/mod_echo.c
index 7570ed5717..e4a9ea234b 100644
--- a/src/mod/applications/mod_echo/mod_echo.c
+++ b/src/mod/applications/mod_echo/mod_echo.c
@@ -36,33 +36,13 @@ static const char modname[] = "mod_echo";
 static void echo_function(switch_core_session *session, char *data)
 {
 	switch_channel *channel;
-	switch_frame *frame;
-	char *codec_name; 
-	switch_codec codec, *read_codec;
 
 	channel = switch_core_session_get_channel(session);
     assert(channel != NULL);	
 
-	read_codec = switch_core_session_get_read_codec(session); 
-
 	switch_channel_answer(channel);
 
-	codec_name = "L16";
-	if (switch_core_codec_init(&codec,
-							   codec_name,
-							   read_codec->implementation->samples_per_second,
-							   read_codec->implementation->microseconds_per_frame / 1000,
-							   read_codec->implementation->number_of_channels,
-							   SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE,
-							   NULL, switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) {
-		switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Raw Codec Activated\n");
-		switch_core_session_set_read_codec(session, &codec);		
-		switch_core_session_set_write_codec(session, &codec);
-		while(switch_channel_ready(channel)) { 
-			switch_core_session_read_frame(session, &frame, -1, 0);
-			switch_core_session_write_frame(session, frame, -1 ,0);
-		}
-	}
+	switch_channel_set_state(channel, CS_LOOPBACK);
 }
 
 static const switch_application_interface echo_application_interface = {
diff --git a/src/switch_core.c b/src/switch_core.c
index d4cc51c56f..fc836e1149 100644
--- a/src/switch_core.c
+++ b/src/switch_core.c
@@ -1621,7 +1621,9 @@ static void switch_core_standard_on_execute(switch_core_session *session)
 		extension->current_application = extension->current_application->next;
 	}
 
-	switch_channel_set_state(session->channel, CS_HANGUP);
+	if (switch_channel_get_state(session->channel) == CS_EXECUTE) {
+		switch_channel_set_state(session->channel, CS_HANGUP);
+	}
 }
 
 static void switch_core_standard_on_loopback(switch_core_session *session)
@@ -1942,6 +1944,7 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session *session)
 		if (state < CS_DONE && midstate == switch_channel_get_state(session->channel)) {
 			switch_thread_cond_wait(session->cond, session->mutex);
 		} 
+
 	}
 	session->thread_running = 0;
 }