]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
cleanup
authorAnthony Minessale <anthony.minessale@gmail.com>
Tue, 14 Oct 2008 18:03:14 +0000 (18:03 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Tue, 14 Oct 2008 18:03:14 +0000 (18:03 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10009 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_core.h
src/switch_core_codec.c
src/switch_core_io.c
src/switch_ivr_originate.c

index aa1cf3097c7160990fe3b2908ff77ec6cfa22595..d3cc18df788862f81c3768bc150803605b8aaf1c 100644 (file)
@@ -1132,6 +1132,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_codec_destroy(switch_codec_t *codec)
 SWITCH_DECLARE(switch_status_t) switch_core_session_set_read_codec(_In_ switch_core_session_t *session, switch_codec_t *codec);
 
 SWITCH_DECLARE(void) switch_core_session_unset_read_codec(_In_ switch_core_session_t *session);
+SWITCH_DECLARE(void) switch_core_session_unset_write_codec(_In_ switch_core_session_t *session);
 
 /*! 
   \brief Retrieve the read codec from a given session
index d727d2526ffca0412bf95106fecbafe9551120d0..6bcb1cf53eb62582220d141ec644e82dcbe58412 100644 (file)
@@ -47,6 +47,11 @@ SWITCH_DECLARE(void) switch_core_session_unset_read_codec(switch_core_session_t
        session->real_read_codec = session->read_codec = NULL;
 }
 
+SWITCH_DECLARE(void) switch_core_session_unset_write_codec(switch_core_session_t *session)
+{
+       session->real_write_codec = session->write_codec = NULL;
+}
+
 
 SWITCH_DECLARE(switch_status_t) switch_core_session_set_read_codec(switch_core_session_t *session, switch_codec_t *codec)
 {
@@ -55,16 +60,24 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_set_read_codec(switch_core_s
        char tmp[30];
 
        if (codec && !codec->implementation) {
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot set INITIALIZED codec!\n");
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot set UNINITIALIZED codec!\n");
                return SWITCH_STATUS_FALSE;
        }
 
        if (!codec || codec == session->real_read_codec) {
+
                if (session->real_read_codec) {
-                       session->read_codec = session->real_read_codec;
+                       if (session->real_read_codec->implementation) {
+                               session->read_codec = session->real_read_codec;
+                       } else {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "resetting to uninitilized codec, setting to NULL\n");
+                               session->read_codec = session->real_read_codec = NULL;
+                               return SWITCH_STATUS_FALSE;
+                       }
                } else {
                        return SWITCH_STATUS_FALSE;
                }
+               
        } else if (codec) {
                if (session->read_codec != session->real_read_codec) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot double-set codec!\n");
index 75f6bd6ddd21d4a5a140c88dae6b33f0b98e923d..95f8f5c96593b0bf73eaabc2537c871ef875e206 100644 (file)
@@ -180,7 +180,6 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
 
        if (!(session->read_codec && session->read_codec->implementation)) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s has no read codec.\n", switch_channel_get_name(session->channel));
-               abort();
                return SWITCH_STATUS_FALSE;
        }
 
index cbac3a1ca269fc4f98baa3996bad5566b044ad90..14b459a5347a17eaf47881ca0da74d35d9f10850 100644 (file)
@@ -88,6 +88,14 @@ static void *SWITCH_THREAD_FUNC collect_thread_run(switch_thread_t *thread, void
        char buf[10] = SWITCH_BLANK_STRING;
        char *p, term;
 
+       if (collect->session) {
+               if (switch_core_session_read_lock(collect->session) != SWITCH_STATUS_SUCCESS) {
+                       return NULL;
+               }
+       } else {
+               return NULL;
+       }
+       
        if (!strcasecmp(collect->key, "exec")) {
                char *data;
                const switch_application_interface_t *application_interface;
@@ -147,7 +155,9 @@ static void *SWITCH_THREAD_FUNC collect_thread_run(switch_thread_t *thread, void
                        }
                }
        }
-  wbreak:
+ wbreak:
+
+       switch_core_session_rwunlock(collect->session);
 
        return NULL;
 }