Converted device2str and control2str to use thread local storage.
authorJason Parker <jparker@digium.com>
Sun, 20 Aug 2006 04:39:57 +0000 (04:39 +0000)
committerJason Parker <jparker@digium.com>
Sun, 20 Aug 2006 04:39:57 +0000 (04:39 +0000)
Thanks Russell.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@40600 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_skinny.c

index 8acf329..7c3d59e 100644 (file)
@@ -72,6 +72,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/stringfields.h"
 #include "asterisk/astobj.h"
 #include "asterisk/abstract_jb.h"
+#include "asterisk/threadstorage.h"
 
 /*************************************
  * Skinny/Asterisk Protocol Settings *
@@ -124,6 +125,12 @@ static struct ast_jb_conf default_jbconf =
 };
 static struct ast_jb_conf global_jbconf;
 
+AST_THREADSTORAGE(device2str_threadbuf, device2str_threadbuf_init);
+#define DEVICE2STR_BUFSIZE   15
+
+AST_THREADSTORAGE(control2str_threadbuf, control2str_threadbuf_init);
+#define CONTROL2STR_BUFSIZE   100
+
 /*********************
  * Protocol Messages *
  *********************/
@@ -1698,7 +1705,7 @@ static int skinny_reset_device(int fd, int argc, char *argv[])
 
 static char *device2str(int type)
 {
-       static char tmp[15];
+       static char *tmp;
 
        switch (type) {
        case SKINNY_DEVICE_NONE:
@@ -1758,7 +1765,9 @@ static char *device2str(int type)
        case SKINNY_DEVICE_UNKNOWN:
                return "Unknown";
        default:
-               snprintf(tmp, sizeof(tmp), "UNKNOWN-%d", type);
+               if (!(tmp = ast_threadstorage_get(&device2str_threadbuf, DEVICE2STR_BUFSIZE)))
+                       return "Unknown";
+               snprintf(tmp, DEVICE2STR_BUFSIZE, "UNKNOWN-%d", type);
                return tmp;
        }
 }
@@ -2469,7 +2478,7 @@ static int skinny_senddigit(struct ast_channel *ast, char digit)
 }
 
 static char *control2str(int ind) {
-       static char tmp[100];
+       static char *tmp;
 
        switch (ind) {
        case AST_CONTROL_HANGUP:
@@ -2509,7 +2518,9 @@ static char *control2str(int ind) {
        case -1:
                return "Stop tone";
        default:
-               snprintf(tmp, sizeof(tmp), "UNKNOWN-%d", ind);
+               if (!(tmp = ast_threadstorage_get(&control2str_threadbuf, CONTROL2STR_BUFSIZE)))
+                        return "Unknown";
+               snprintf(tmp, CONTROL2STR_BUFSIZE, "UNKNOWN-%d", ind);
                return tmp;
        }
 }