]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-5528 --resolve
authorMoises Silva <moy@sangoma.com>
Fri, 16 Aug 2013 13:52:14 +0000 (09:52 -0400)
committerMoises Silva <moy@sangoma.com>
Fri, 16 Aug 2013 13:52:14 +0000 (09:52 -0400)
src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c

index cd09bf3a2665fbca9c98503c4955651da5ba81f0..416eb17b82c6283aa2e64a995cbcb4e8a7573c02 100644 (file)
@@ -894,6 +894,7 @@ SWITCH_STANDARD_API(sangoma_function)
        char *argv[10] = { 0 };
        int argc = 0;
        char *mycmd = NULL;
+       switch_bool_t locked = SWITCH_FALSE;
 
        if (zstr(cmd)) {
                stream->write_function(stream, "%s", SANGOMA_SYNTAX);
@@ -910,6 +911,10 @@ SWITCH_STANDARD_API(sangoma_function)
                return SWITCH_STATUS_SUCCESS;
        }
 
+       /* Most operations in this API require the global session lock anyways since sessions can disappear at any moment ... */
+       switch_mutex_lock(g_sessions_lock);
+       locked = SWITCH_TRUE;
+
        if (!strcasecmp(argv[0], "settings")) {
                char addrbuff[50];
                int addr;
@@ -922,7 +927,6 @@ SWITCH_STANDARD_API(sangoma_function)
                const void *var;
                void *val;
                unsigned totalsess = 0;
-               switch_mutex_lock(g_sessions_lock);
 #define STATS_FORMAT "%-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-10.10s %-15.15s %-15.15s\n"
                stream->write_function(stream, STATS_FORMAT,
                                "Session", "Codec", "Enc", "Dec", "Enc Tx", "Enc Rx", "Dec Tx", "Dec Rx", "Enc Lost", "Dec Lost", "Enc AvgRxMs", "Dec AvgRxMs");
@@ -967,7 +971,6 @@ SWITCH_STANDARD_API(sangoma_function)
                                        decoder_avgrxus_str);
                        totalsess++;
                }
-               switch_mutex_unlock(g_sessions_lock);
                stream->write_function(stream, "Total sessions: %d\n", totalsess);
        } else if (!strcasecmp(argv[0], "stats")) {
                struct sangoma_transcoding_session *sess;
@@ -983,6 +986,7 @@ SWITCH_STANDARD_API(sangoma_function)
                        stream->write_function(stream, "%s", SANGOMA_SYNTAX);
                        goto done;
                } 
+
                sess = sangoma_find_session(sessid);
                if (!sess) {
                        stream->write_function(stream, "Failed to find session %lu\n", sessid);
@@ -1076,6 +1080,9 @@ SWITCH_STANDARD_API(sangoma_function)
        }
 
 done:
+       if (locked) {
+               switch_mutex_unlock(g_sessions_lock);
+       }
        switch_safe_free(mycmd);
 
        return SWITCH_STATUS_SUCCESS;