diff --git a/httpd.c b/httpd.c index 30cdca1..08a1b44 100644 --- a/httpd.c +++ b/httpd.c @@ -506,9 +506,9 @@ static void *job_thread(void *arg) for (;;) { 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? */ continue; @@ -520,6 +520,8 @@ static void *job_thread(void *arg) /* it's a socket */ FILE *f = NULL; + p_state->th_state[pid] = THST_IN; + xs_data_get(&f, job); if (f != NULL) @@ -527,10 +529,14 @@ static void *job_thread(void *arg) } else { /* it's a q_item */ + p_state->th_state[pid] = THST_OUT; + process_queue_item(job); } } + p_state->th_state[pid] = THST_STOP; + srv_debug(1, xs_fmt("job thread %d stopped", pid)); return NULL; @@ -556,6 +562,8 @@ static void *background_thread(void *arg) time_t t; int cnt = 0; + p_state->th_state[0] = THST_IN; + { xs *list = user_list(); char *p, *uid; @@ -588,6 +596,8 @@ static void *background_thread(void *arg) if (cnt == 0) { /* sleep 3 seconds */ + p_state->th_state[0] = THST_WAIT; + #ifdef USE_POLL_FOR_SLEEP poll(NULL, 0, 3 * 1000); #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")); return NULL; diff --git a/snac.h b/snac.h index 05bb8ab..c8ba887 100644 --- a/snac.h +++ b/snac.h @@ -51,6 +51,7 @@ typedef struct { time_t srv_start_time; /* start time */ int job_fifo_size; /* job fifo size */ int n_threads; /* number of configured threads */ + enum { THST_WAIT, THST_IN, THST_OUT, THST_STOP } th_state[MAX_THREADS]; } srv_state; void snac_log(snac *user, xs_str *str);