Create sleep mutex and cond variable only once.

This commit is contained in:
default 2023-02-22 10:35:26 +01:00
parent 295507fd9e
commit 60c50c02f6

15
httpd.c
View file

@ -342,6 +342,9 @@ static void *job_thread(void *arg)
return NULL; return NULL;
} }
/* background thread sleep control */
static pthread_mutex_t sleep_mutex;
static pthread_cond_t sleep_cond;
static void *background_thread(void *arg) static void *background_thread(void *arg)
/* background thread (queue management and other things) */ /* background thread (queue management and other things) */
@ -392,16 +395,14 @@ static void *background_thread(void *arg)
#ifdef USE_POLL_FOR_SLEEP #ifdef USE_POLL_FOR_SLEEP
poll(NULL, 0, 3 * 1000); poll(NULL, 0, 3 * 1000);
#else #else
pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t dummy_cond = PTHREAD_COND_INITIALIZER;
struct timespec ts; struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts); clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 3; ts.tv_sec += 3;
pthread_mutex_lock(&dummy_mutex); pthread_mutex_lock(&sleep_mutex);
while (pthread_cond_timedwait(&dummy_cond, &dummy_mutex, &ts) == 0); while (pthread_cond_timedwait(&sleep_cond, &sleep_mutex, &ts) == 0);
pthread_mutex_unlock(&dummy_mutex); pthread_mutex_unlock(&sleep_mutex);
#endif #endif
} }
} }
@ -449,6 +450,10 @@ void httpd(void)
sem_init(&job_sem, 0, 0); sem_init(&job_sem, 0, 0);
job_fifo = xs_list_new(); job_fifo = xs_list_new();
/* initialize sleep control */
pthread_mutex_init(&sleep_mutex, NULL);
pthread_cond_init(&sleep_cond, NULL);
n_threads = xs_number_get(xs_dict_get(srv_config, "num_threads")); n_threads = xs_number_get(xs_dict_get(srv_config, "num_threads"));
#ifdef _SC_NPROCESSORS_ONLN #ifdef _SC_NPROCESSORS_ONLN