]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FSCORE-341
authorAnthony Minessale <anthony.minessale@gmail.com>
Tue, 24 Mar 2009 14:54:13 +0000 (14:54 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Tue, 24 Mar 2009 14:54:13 +0000 (14:54 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12728 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/formats/mod_sndfile/mod_sndfile.c
src/mod/languages/mod_lua/freeswitch_lua.cpp
src/switch_core_file.c
src/switch_cpp.cpp

index 3d70fd41f6cb7adb54588876e5cecc1f3c383fd0..3df7b8a8faf70263db39eeed0bf11aaf9f916c09 100644 (file)
@@ -103,7 +103,8 @@ static switch_status_t sndfile_file_open(switch_file_handle_t *handle, const cha
                context->sfinfo.channels = handle->channels;
                context->sfinfo.samplerate = handle->samplerate;
                if (handle->samplerate == 8000 || handle->samplerate == 16000 ||
-                       handle->samplerate == 24000 || handle->samplerate == 32000 || handle->samplerate == 48000) {
+                       handle->samplerate == 24000 || handle->samplerate == 32000 || handle->samplerate == 48000 ||
+                       handle->samplerate == 11025 || handle->samplerate == 22050 || handle->samplerate == 44100) {
                        context->sfinfo.format |= SF_FORMAT_PCM_16;
                }
 
index a5c1cd8007facc12035e7a81f73f0a04164af238..640cfda0b1425858a62b9fcd0b772749c084d44e 100644 (file)
@@ -24,20 +24,23 @@ static switch_status_t lua_hanguphook(switch_core_session_t *session_hungup);
 Session::~Session()
 {
 
-       if (channel) {
-               switch_channel_set_private(channel, "CoreSession", NULL);
-       }
-
-       if (hangup_func_str) {
-               if (session) {
-                       switch_core_event_hook_remove_state_change(session, lua_hanguphook);
+       if (session) {
+               if (!channel) {
+                       channel = switch_core_session_get_channel(session);
                }
-               switch_safe_free(hangup_func_str);
+               switch_channel_set_private(channel, "CoreSession", NULL);
+               switch_core_event_hook_remove_state_change(session, lua_hanguphook);
+               session = NULL;
+               channel = NULL;
        }
 
+       switch_safe_free(hangup_func_str);
        switch_safe_free(hangup_func_arg);
        switch_safe_free(cb_function);
        switch_safe_free(cb_arg);
+
+       init_vars();
+       
 }
 
 bool Session::begin_allow_threads()
index 1cc3f20d6924ed9d70152d390d465e0d2daa3ad4..ffc69bdb5908c803af6da414070d9247cab95bec 100644 (file)
@@ -290,10 +290,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_write(switch_file_handle_t *fh,
                                fh->dbuf = switch_core_alloc(fh->memory_pool, fh->dbuflen);
                        }
                        switch_assert(fh->resampler->to_len <= fh->dbuflen);
-                       memcpy(fh->dbuf, fh->resampler->to, fh->resampler->to_len);
+                       memcpy(fh->dbuf, fh->resampler->to, fh->resampler->to_len * 2);
                        data = fh->dbuf;
                } else {
-                       memcpy(data, fh->resampler->to, fh->resampler->to_len);
+                       memcpy(data, fh->resampler->to, fh->resampler->to_len * 2);
                }
 
                *len = fh->resampler->to_len / fh->channels;
index ebd13bf1911708c0ec067e08d66f66869743ca0a..cc5d8116ee8c934dc6fc01b657c293104bb503f6 100644 (file)
@@ -888,22 +888,28 @@ SWITCH_DECLARE(void) CoreSession::destroy(void)
 {
        this_check_void();
 
-       if (channel) {
-               switch_channel_set_private(channel, "CoreSession", NULL);
-       }
-       
        switch_safe_free(xml_cdr_text);
        switch_safe_free(uuid); 
        switch_safe_free(tts_name);
        switch_safe_free(voice_name);
 
        if (session) {
+               if (!channel) {
+                       channel = switch_core_session_get_channel(session);
+               }
+
+               if (channel) {
+                       switch_channel_set_private(channel, "CoreSession", NULL);
+               }
+               
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "destroy/unlink session from object\n");
-        if (switch_test_flag(this, S_HUP) && !switch_channel_test_flag(channel, CF_TRANSFER)) {
+
+        if (switch_channel_up(channel) && switch_test_flag(this, S_HUP) && !switch_channel_test_flag(channel, CF_TRANSFER)) {
             switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
         }
         switch_core_session_rwunlock(session);
                session = NULL;
+               channel = NULL;
     }
 
        allocated = 0;