diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index c09aa6e2d2e3e3a47c981d201e13aa164636720d..e2585e56ce770f2380d13fac4f9ae0215f2d2617 100755 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -161,11 +161,11 @@ struct ast_realloca { #define inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__ #define AST_STACKSIZE 128 * 1024 - +#define ast_pthread_create(a,b,c,d) ast_pthread_create_stack(a,b,c,d,0) #ifdef __linux__ #define ast_strcasestr strcasestr #else extern char *ast_strcasestr(const char *, const char *); #endif /* __linux__ */ -extern int ast_pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data); +extern int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data, size_t stacksize); #endif diff --git a/utils.c b/utils.c index 6267bbbb7ab4bd317973528ee9ed5a5bf284c9fb..3e9ddf67b3b1681f222242747f4ea4767914a169 100755 --- a/utils.c +++ b/utils.c @@ -389,14 +389,16 @@ int ast_utils_init(void) } -int ast_pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data) +int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data, size_t stacksize) { pthread_attr_t lattr; if (!attr) { pthread_attr_init(&lattr); attr = &lattr; } - errno = pthread_attr_setstacksize(attr, AST_STACKSIZE); + if (!stacksize) + stacksize = AST_STACKSIZE; + errno = pthread_attr_setstacksize(attr, stacksize); if (errno) ast_log(LOG_WARNING, "pthread_attr_setstacksize returned non-zero: %s\n", strerror(errno)); return pthread_create(thread, attr, start_routine, data); /* We're in ast_pthread_create, so it's okay */