diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 8acf329846a4138f9348393c48be379ca824c88b..7c3d59e7656b5cd9fee16e79753fc63a9b585058 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -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; } }