diff options
author | Linus Nordberg <linus@nordberg.se> | 2013-08-26 10:35:12 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordberg.se> | 2013-09-02 13:44:28 +0200 |
commit | 55ca280f16473095380e22c574910f106b11058f (patch) | |
tree | f524607a18cce8e39c2cf9c0716659232e16c24c /radsecproxy.c | |
parent | 05b360612d4f1bb48caedc766ede2109024bdc6f (diff) |
Create threads with a 32 KB stack rather than what happens to be the default.
On Linux, the default stack size is typically 8 MB.
Patch by Fabian Mauchle.
Diffstat (limited to 'radsecproxy.c')
-rw-r--r-- | radsecproxy.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/radsecproxy.c b/radsecproxy.c index e919ceb..56abe3e 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -1816,7 +1816,7 @@ void *clientwr(void *arg) { #if defined ENABLE_EXPERIMENTAL_DYNDISC server->in_use = 1; #endif - if (pthread_create(&clientrdth, NULL, conf->pdef->clientconnreader, (void *)server)) { + if (pthread_create(&clientrdth, &pthread_attr, conf->pdef->clientconnreader, (void *)server)) { debugerrno(errno, DBG_ERR, "clientwr: pthread_create failed"); goto errexit; } @@ -1975,7 +1975,7 @@ void createlistener(uint8_t type, char *arg) { if (!sp) debugx(1, DBG_ERR, "malloc failed"); *sp = s; - if (pthread_create(&th, NULL, protodefs[type]->listener, (void *)sp)) + if (pthread_create(&th, &pthread_attr, protodefs[type]->listener, (void *)sp)) debugerrnox(errno, DBG_ERR, "pthread_create failed"); pthread_detach(th); } @@ -2225,7 +2225,7 @@ struct list *createsubrealmservers(struct realm *realm, struct list *srvconfs) { #if defined ENABLE_EXPERIMENTAL_DYNDISC pthread_mutex_lock(&srvconf->servers->lock); #endif - if (pthread_create(&clientth, NULL, clientwr, (void *)(srvconf->servers))) { + if (pthread_create(&clientth, &pthread_attr, clientwr, (void *)(srvconf->servers))) { #if defined ENABLE_EXPERIMENTAL_DYNDISC pthread_mutex_unlock(&srvconf->servers->lock); #endif @@ -3344,6 +3344,11 @@ int radsecproxy_main(int argc, char **argv) { debug_init("radsecproxy"); debug_set_level(DEBUG_LEVEL); + if (pthread_attr_init(&pthread_attr)) + debugx(1, DBG_ERR, "pthread_attr_init failed"); + if (pthread_attr_setstacksize(&pthread_attr, PTHREAD_STACK_SIZE)) + debugx(1, DBG_ERR, "pthread_attr_setstacksize failed"); + for (i = 0; i < RAD_PROTOCOUNT; i++) protodefs[i] = protoinits[i](i); @@ -3395,7 +3400,7 @@ int radsecproxy_main(int argc, char **argv) { sigaddset(&sigset, SIGHUP); sigaddset(&sigset, SIGPIPE); pthread_sigmask(SIG_BLOCK, &sigset, NULL); - pthread_create(&sigth, NULL, sighandler, NULL); + pthread_create(&sigth, &pthread_attr, sighandler, NULL); for (entry = list_first(srvconfs); entry; entry = list_next(entry)) { srvconf = (struct clsrvconf *)entry->data; @@ -3403,7 +3408,7 @@ int radsecproxy_main(int argc, char **argv) { continue; if (!addserver(srvconf)) debugx(1, DBG_ERR, "failed to add server"); - if (pthread_create(&srvconf->servers->clientth, NULL, clientwr, + if (pthread_create(&srvconf->servers->clientth, &pthread_attr, clientwr, (void *)(srvconf->servers))) debugx(1, DBG_ERR, "pthread_create failed"); } |