diff options
author | Russell Bryant <russell@russellbryant.com> | 2007-05-24 18:30:19 +0000 |
---|---|---|
committer | Russell Bryant <russell@russellbryant.com> | 2007-05-24 18:30:19 +0000 |
commit | 4b3a3fb14c298512ef69e17a710e210de14914fb (patch) | |
tree | 86895556d8f221a39105f4398a54d612fbbd3da8 /main/utils.c | |
parent | bcd2bd8294408ca2f432747ef2e3073edecec4c1 (diff) |
Add a new API call for creating detached threads. Then, go replace all of the
places in the code where the same block of code for creating detached threads
was replicated. (patch from bbryant)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@65968 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/utils.c')
-rw-r--r-- | main/utils.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/main/utils.c b/main/utils.c index cdb87eb57..498184a41 100644 --- a/main/utils.c +++ b/main/utils.c @@ -595,6 +595,32 @@ int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*st return pthread_create(thread, attr, start_routine, data); /* We're in ast_pthread_create, so it's okay */ } + +int ast_pthread_create_detached_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), + void *data, size_t stacksize, const char *file, const char *caller, + int line, const char *start_fn) +{ + unsigned char attr_destroy = 0; + int res; + + if (!attr) { + attr = alloca(sizeof(*attr)); + pthread_attr_init(attr); + attr_destroy = 1; + } + + if ((errno = pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED))) + ast_log(LOG_WARNING, "pthread_attr_setdetachstate: %s\n", strerror(errno)); + + res = ast_pthread_create_stack(thread, attr, start_routine, data, + stacksize, file, caller, line, start_fn); + + if (attr_destroy) + pthread_attr_destroy(attr); + + return res; +} + int ast_wait_for_input(int fd, int ms) { struct pollfd pfd[1]; |