]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix crash when passing null string to switch_core_session_locate (via killchan with...
authorMichael Jerris <mike@jerris.com>
Sat, 2 Sep 2006 07:31:18 +0000 (07:31 +0000)
committerMichael Jerris <mike@jerris.com>
Sat, 2 Sep 2006 07:31:18 +0000 (07:31 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2479 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_commands/mod_commands.c
src/switch_core.c

index 4e9fb618457301dfc56fff1b47f061721b43c4f8..f4102c5d210144ec4c633a99c5aa4a35a2c1d993 100644 (file)
@@ -117,7 +117,7 @@ static switch_status_t kill_function(char *dest, switch_core_session_t *isession
                return SWITCH_STATUS_FALSE;
        }
 
-       if ((session = switch_core_session_locate(dest))) {
+       if (dest && (session = switch_core_session_locate(dest))) {
                switch_channel_t *channel = switch_core_session_get_channel(session);
                switch_core_session_kill_channel(session, SWITCH_SIG_KILL);
                switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
index ed7417a01fb68cceb41a07308ee8f12e8158fa7f..dae2b85cb32ff7ba8813fecaf01b40fe7f85ea3c 100644 (file)
@@ -269,18 +269,22 @@ SWITCH_DECLARE(switch_core_session_t *) switch_core_session_locate(char *uuid_st
 {
        switch_core_session_t *session;
 
-       switch_mutex_lock(runtime.session_table_mutex);
-       if ((session = switch_core_hash_find(runtime.session_table, uuid_str))) {
-               /* Acquire a read lock on the session */
-               if (switch_thread_rwlock_tryrdlock(session->rwlock) != SWITCH_STATUS_SUCCESS) {
-                       /* not available, forget it */
-                       session = NULL;
+       if (uuid_str) {
+               switch_mutex_lock(runtime.session_table_mutex);
+               if ((session = switch_core_hash_find(runtime.session_table, uuid_str))) {
+                       /* Acquire a read lock on the session */
+                       if (switch_thread_rwlock_tryrdlock(session->rwlock) != SWITCH_STATUS_SUCCESS) {
+                               /* not available, forget it */
+                               session = NULL;
+                       }
                }
-       }
-       switch_mutex_unlock(runtime.session_table_mutex);
+               switch_mutex_unlock(runtime.session_table_mutex);
 
-       /* if its not NULL, now it's up to you to rwunlock this */
-       return session;
+               /* if its not NULL, now it's up to you to rwunlock this */
+               return session;
+       } else {
+               return NULL;
+       }
 }
 
 SWITCH_DECLARE(void) switch_core_session_hupall(void)