summaryrefslogtreecommitdiff
path: root/httpd.c
diff options
context:
space:
mode:
Diffstat (limited to 'httpd.c')
-rw-r--r--httpd.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/httpd.c b/httpd.c
index a617600..1d91b34 100644
--- a/httpd.c
+++ b/httpd.c
@@ -342,6 +342,9 @@ static void *job_thread(void *arg)
return NULL;
}
+/* background thread sleep control */
+static pthread_mutex_t sleep_mutex;
+static pthread_cond_t sleep_cond;
static void *background_thread(void *arg)
/* background thread (queue management and other things) */
@@ -392,16 +395,14 @@ static void *background_thread(void *arg)
#ifdef USE_POLL_FOR_SLEEP
poll(NULL, 0, 3 * 1000);
#else
- pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER;
- pthread_cond_t dummy_cond = PTHREAD_COND_INITIALIZER;
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 3;
- pthread_mutex_lock(&dummy_mutex);
- while (pthread_cond_timedwait(&dummy_cond, &dummy_mutex, &ts) == 0);
- pthread_mutex_unlock(&dummy_mutex);
+ pthread_mutex_lock(&sleep_mutex);
+ while (pthread_cond_timedwait(&sleep_cond, &sleep_mutex, &ts) == 0);
+ pthread_mutex_unlock(&sleep_mutex);
#endif
}
}
@@ -449,6 +450,10 @@ void httpd(void)
sem_init(&job_sem, 0, 0);
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"));
#ifdef _SC_NPROCESSORS_ONLN