Procházet zdrojové kódy

Added some state flags for threads.

default před 2 roky
rodič
revize
b401cd23ff
2 změnil soubory, kde provedl 15 přidání a 2 odebrání
  1. 14 2
      httpd.c
  2. 1 0
      snac.h

+ 14 - 2
httpd.c

@@ -506,9 +506,9 @@ static void *job_thread(void *arg)
     for (;;) {
     for (;;) {
         xs *job = NULL;
         xs *job = NULL;
 
 
-        job_wait(&job);
+        p_state->th_state[pid] = THST_WAIT;
 
 
-        srv_debug(2, xs_fmt("job thread %d wake up", pid));
+        job_wait(&job);
 
 
         if (job == NULL) /* corrupted message? */
         if (job == NULL) /* corrupted message? */
             continue;
             continue;
@@ -520,6 +520,8 @@ static void *job_thread(void *arg)
             /* it's a socket */
             /* it's a socket */
             FILE *f = NULL;
             FILE *f = NULL;
 
 
+            p_state->th_state[pid] = THST_IN;
+
             xs_data_get(&f, job);
             xs_data_get(&f, job);
 
 
             if (f != NULL)
             if (f != NULL)
@@ -527,10 +529,14 @@ static void *job_thread(void *arg)
         }
         }
         else {
         else {
             /* it's a q_item */
             /* it's a q_item */
+            p_state->th_state[pid] = THST_OUT;
+
             process_queue_item(job);
             process_queue_item(job);
         }
         }
     }
     }
 
 
+    p_state->th_state[pid] = THST_STOP;
+
     srv_debug(1, xs_fmt("job thread %d stopped", pid));
     srv_debug(1, xs_fmt("job thread %d stopped", pid));
 
 
     return NULL;
     return NULL;
@@ -556,6 +562,8 @@ static void *background_thread(void *arg)
         time_t t;
         time_t t;
         int cnt = 0;
         int cnt = 0;
 
 
+        p_state->th_state[0] = THST_IN;
+
         {
         {
             xs *list = user_list();
             xs *list = user_list();
             char *p, *uid;
             char *p, *uid;
@@ -588,6 +596,8 @@ static void *background_thread(void *arg)
         if (cnt == 0) {
         if (cnt == 0) {
             /* sleep 3 seconds */
             /* sleep 3 seconds */
 
 
+            p_state->th_state[0] = THST_WAIT;
+
 #ifdef USE_POLL_FOR_SLEEP
 #ifdef USE_POLL_FOR_SLEEP
             poll(NULL, 0, 3 * 1000);
             poll(NULL, 0, 3 * 1000);
 #else
 #else
@@ -603,6 +613,8 @@ static void *background_thread(void *arg)
         }
         }
     }
     }
 
 
+    p_state->th_state[0] = THST_STOP;
+
     srv_log(xs_fmt("background thread stopped"));
     srv_log(xs_fmt("background thread stopped"));
 
 
     return NULL;
     return NULL;

+ 1 - 0
snac.h

@@ -51,6 +51,7 @@ typedef struct {
     time_t srv_start_time;  /* start time */
     time_t srv_start_time;  /* start time */
     int job_fifo_size;      /* job fifo size */
     int job_fifo_size;      /* job fifo size */
     int n_threads;          /* number of configured threads */
     int n_threads;          /* number of configured threads */
+    enum { THST_WAIT, THST_IN, THST_OUT, THST_STOP } th_state[MAX_THREADS];
 } srv_state;
 } srv_state;
 
 
 void snac_log(snac *user, xs_str *str);
 void snac_log(snac *user, xs_str *str);