From 241164a201e03acce363e902fb25e452827211f0 Mon Sep 17 00:00:00 2001 From: Fabian Mauchle Date: Mon, 26 Jul 2021 14:12:15 +0200 Subject: [PATCH] fix setstacksize for glibc 2.34 (fix #91) --- ChangeLog | 1 + radsecproxy.c | 10 ++++++++-- radsecproxy.h | 12 +++--------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 80ffb42..81a129e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,7 @@ unreleased changes - Fix small memory leak in config parser - Fix lazy certificate check when connecting to TLS servers - Fix connect is aborted if first host in list has invalid certificate + - Fix setstacksize for glibc 2.34 (#91) 2021-05-28 1.9.0 New features: diff --git a/radsecproxy.c b/radsecproxy.c index 01ffa52..35af06f 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -3033,6 +3033,7 @@ int createpidfile(const char *pidfile) { int radsecproxy_main(int argc, char **argv) { pthread_t sigth; sigset_t sigset; + size_t stacksize; struct list_node *entry; uint8_t foreground = 0, pretend = 0, loglevel = 0; char *configfile = NULL, *pidfile = NULL; @@ -3044,8 +3045,13 @@ int radsecproxy_main(int argc, char **argv) { 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"); +#if defined(PTHREAD_STACK_MIN) + stacksize = THREAD_STACK_SIZE > PTHREAD_STACK_MIN ? THREAD_STACK_SIZE : PTHREAD_STACK_MIN; +#else + stacksize = THREAD_STACK_SIZE; +#endif + if (pthread_attr_setstacksize(&pthread_attr, stacksize)) + debug(DBG_WARN, "pthread_attr_setstacksize failed! Using system default. Memory footprint might be increased!"); #if defined(HAVE_MALLOPT) if (mallopt(M_TRIM_THRESHOLD, 4 * 1024) != 1) debugx(1, DBG_ERR, "mallopt failed"); diff --git a/radsecproxy.h b/radsecproxy.h index 84c57fd..8835a8f 100644 --- a/radsecproxy.h +++ b/radsecproxy.h @@ -29,15 +29,9 @@ #define STATUS_SERVER_PERIOD 25 #define IDLE_TIMEOUT 300 -/* We want PTHREAD_STACK_SIZE to be 32768, but some platforms - * have a higher minimum value defined in PTHREAD_STACK_MIN. */ -#define PTHREAD_STACK_SIZE 32768 -#if defined(PTHREAD_STACK_MIN) -#if PTHREAD_STACK_MIN > PTHREAD_STACK_SIZE -#undef PTHREAD_STACK_SIZE -#define PTHREAD_STACK_SIZE PTHREAD_STACK_MIN -#endif -#endif +/* Target value for stack size. + * Some platforms might define higher minimums in PTHREAD_STACK_MIN. */ +#define THREAD_STACK_SIZE 32768 /* For systems that only support RFC 2292 Socket API, but not RFC 3542 * like Cygwin */