From b5dd8eb3c8150748cd6746ac0d8bc803e22513d9 Mon Sep 17 00:00:00 2001 From: tilghman Date: Fri, 20 Feb 2009 21:31:50 +0000 Subject: Merged revisions 177732 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ................ r177732 | tilghman | 2009-02-20 15:25:37 -0600 (Fri, 20 Feb 2009) | 10 lines Merged revisions 177701 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r177701 | tilghman | 2009-02-20 15:15:01 -0600 (Fri, 20 Feb 2009) | 3 lines This exception does not appear to still be true for Solaris 10, and OpenSolaris definitely needs it to be removed. Fixed for snuff-home on -dev channel. ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@177756 f38db490-d61c-443f-a65b-d21fe96a405b --- include/asterisk/threadstorage.h | 54 ++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 30 deletions(-) (limited to 'include') diff --git a/include/asterisk/threadstorage.h b/include/asterisk/threadstorage.h index 1cabdb6c3..46e0baf21 100644 --- a/include/asterisk/threadstorage.h +++ b/include/asterisk/threadstorage.h @@ -60,12 +60,6 @@ struct ast_threadstorage { int (*custom_init)(void *); /*!< Custom initialization function specific to the object */ }; -#ifdef SOLARIS -#define THREADSTORAGE_ONCE_INIT {PTHREAD_ONCE_INIT} -#else -#define THREADSTORAGE_ONCE_INIT PTHREAD_ONCE_INIT -#endif - #if defined(DEBUG_THREADLOCALS) void __ast_threadstorage_object_add(void *key, size_t len, const char *file, const char *function, unsigned int line); void __ast_threadstorage_object_remove(void *key); @@ -105,32 +99,32 @@ void __ast_threadstorage_object_replace(void *key_old, void *key_new, size_t len */ #if !defined(DEBUG_THREADLOCALS) #define AST_THREADSTORAGE_CUSTOM(name, c_init, c_cleanup) \ -static void __init_##name(void); \ -static struct ast_threadstorage name = { \ - .once = THREADSTORAGE_ONCE_INIT, \ - .key_init = __init_##name, \ - .custom_init = c_init, \ -}; \ -static void __init_##name(void) \ -{ \ - pthread_key_create(&(name).key, c_cleanup); \ +static void __init_##name(void); \ +static struct ast_threadstorage name = { \ + .once = PTHREAD_ONCE_INIT, \ + .key_init = __init_##name, \ + .custom_init = c_init, \ +}; \ +static void __init_##name(void) \ +{ \ + pthread_key_create(&(name).key, c_cleanup); \ } #else /* defined(DEBUG_THREADLOCALS) */ -#define AST_THREADSTORAGE_CUSTOM(name, c_init, c_cleanup) \ -static void __init_##name(void); \ -static struct ast_threadstorage name = { \ - .once = THREADSTORAGE_ONCE_INIT, \ - .key_init = __init_##name, \ - .custom_init = c_init, \ -}; \ -static void __cleanup_##name(void *data) \ -{ \ - __ast_threadstorage_object_remove(data); \ - c_cleanup(data); \ -} \ -static void __init_##name(void) \ -{ \ - pthread_key_create(&(name).key, __cleanup_##name); \ +#define AST_THREADSTORAGE_CUSTOM_SCOPE(name, c_init, c_cleanup, scope) \ +static void __init_##name(void); \ +static struct ast_threadstorage name = { \ + .once = PTHREAD_ONCE_INIT, \ + .key_init = __init_##name, \ + .custom_init = c_init, \ +}; \ +static void __cleanup_##name(void *data) \ +{ \ + __ast_threadstorage_object_remove(data); \ + c_cleanup(data); \ +} \ +static void __init_##name(void) \ +{ \ + pthread_key_create(&(name).key, __cleanup_##name); \ } #endif /* defined(DEBUG_THREADLOCALS) */ -- cgit v1.2.3