Просмотр исходного кода

The waiting of the queue thread is done in a more appropriate way.

default 3 лет назад
Родитель
Сommit
8635c5df90
1 измененных файлов с 11 добавлено и 1 удалено
  1. 11 1
      httpd.c

+ 11 - 1
httpd.c

@@ -200,6 +200,9 @@ void term_handler(int s)
 static void *queue_thread(void *arg)
 /* queue thread (queue management) */
 {
+    pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER;
+    pthread_cond_t  dummy_cond  = PTHREAD_COND_INITIALIZER;
+
     srv_log(xs_fmt("queue thread start"));
 
     while (srv_running) {
@@ -216,7 +219,14 @@ static void *queue_thread(void *arg)
             }
         }
 
-        sleep(3);
+        /* sleep 3 seconds */
+        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);
     }
 
     srv_log(xs_fmt("queue thread stop"));