Browse Source

MT#56374 move thread_create to lib

It actually uses a shared config setting from the lib (stack size) so
the function itself also belongs in the lib.

Change an argument type to bool.

Change-Id: I8be68008fcfc058cb29069102eb00497b66897a5
pull/1701/head
Richard Fuchs 2 years ago
parent
commit
118a7ed472
3 changed files with 33 additions and 31 deletions
  1. +1
    -31
      daemon/helpers.c
  2. +31
    -0
      lib/auxlib.c
  3. +1
    -0
      lib/auxlib.h

+ 1
- 31
daemon/helpers.c View File

@ -263,36 +263,6 @@ static void *thread_detach_func(void *d) {
return NULL; return NULL;
} }
static int thread_create(void *(*func)(void *), void *arg, int joinable, pthread_t *handle, const char *name) {
pthread_attr_t att;
pthread_t thr;
int ret;
if (pthread_attr_init(&att))
abort();
if (pthread_attr_setdetachstate(&att, joinable ? PTHREAD_CREATE_JOINABLE : PTHREAD_CREATE_DETACHED))
abort();
if (rtpe_config.common.thread_stack > 0) {
if (pthread_attr_setstacksize(&att, rtpe_config.common.thread_stack * 1024)) {
ilog(LOG_ERR, "Failed to set thread stack size to %llu",
(unsigned long long) rtpe_config.common.thread_stack * 1024);
abort();
}
}
ret = pthread_create(&thr, &att, func, arg);
pthread_attr_destroy(&att);
if (ret)
return ret;
if (handle)
*handle = thr;
#ifdef __GLIBC__
if (name)
pthread_setname_np(thr, name);
#endif
return 0;
}
void thread_create_detach_prio(void (*f)(void *), void *d, const char *scheduler, int priority, void thread_create_detach_prio(void (*f)(void *), void *d, const char *scheduler, int priority,
const char *name) const char *name)
{ {
@ -304,7 +274,7 @@ void thread_create_detach_prio(void (*f)(void *), void *d, const char *scheduler
dt->scheduler = scheduler; dt->scheduler = scheduler;
dt->priority = priority; dt->priority = priority;
if (thread_create(thread_detach_func, dt, 1, NULL, name))
if (thread_create(thread_detach_func, dt, true, NULL, name))
abort(); abort();
} }


+ 31
- 0
lib/auxlib.c View File

@ -70,6 +70,37 @@ void service_notify(const char *message) {
} }
int thread_create(void *(*func)(void *), void *arg, bool joinable, pthread_t *handle, const char *name) {
pthread_attr_t att;
pthread_t thr;
int ret;
if (pthread_attr_init(&att))
abort();
if (pthread_attr_setdetachstate(&att, joinable ? PTHREAD_CREATE_JOINABLE : PTHREAD_CREATE_DETACHED))
abort();
if (rtpe_common_config_ptr->thread_stack > 0) {
if (pthread_attr_setstacksize(&att, rtpe_common_config_ptr->thread_stack * 1024)) {
ilog(LOG_ERR, "Failed to set thread stack size to %llu",
(unsigned long long) rtpe_common_config_ptr->thread_stack * 1024);
abort();
}
}
ret = pthread_create(&thr, &att, func, arg);
pthread_attr_destroy(&att);
if (ret)
return ret;
if (handle)
*handle = thr;
#ifdef __GLIBC__
if (name)
pthread_setname_np(thr, name);
#endif
return 0;
}
void resources(void) { void resources(void) {
struct rlimit rl; struct rlimit rl;
int tryv; int tryv;


+ 1
- 0
lib/auxlib.h View File

@ -59,6 +59,7 @@ void config_load(int *argc, char ***argv, GOptionEntry *entries, const char *des
struct rtpengine_common_config *); struct rtpengine_common_config *);
char *get_thread_buf(void); char *get_thread_buf(void);
int thread_create(void *(*func)(void *), void *arg, bool joinable, pthread_t *handle, const char *name);
unsigned int in6_addr_hash(const void *p); unsigned int in6_addr_hash(const void *p);
int in6_addr_eq(const void *a, const void *b); int in6_addr_eq(const void *a, const void *b);


Loading…
Cancel
Save