Give the fellow open worker thread some state

To address some Coverity pedentry with minor impact (at most)

CID#469230
parent 8f810ce4
...@@ -2211,9 +2211,18 @@ dummy_ban(void) ...@@ -2211,9 +2211,18 @@ dummy_ban(void)
return (ban); return (ban);
} }
enum sfe_open_worker_state {
SOW_INIT = 0,
SOW_STARTING,
SOW_RUNNING,
SOW_STOPPING,
SOW_DONE
};
struct sfe_open_worker_priv { struct sfe_open_worker_priv {
unsigned magic; unsigned magic;
#define SFE_OPEN_WORKER_PRIV 0xe4711115 #define SFE_OPEN_WORKER_PRIV 0xe4711115
enum sfe_open_worker_state state;
pthread_mutex_t mtx; pthread_mutex_t mtx;
pthread_cond_t cond; pthread_cond_t cond;
...@@ -2231,9 +2240,13 @@ sfe_open_worker_thread(struct worker *wrk, void *priv) ...@@ -2231,9 +2240,13 @@ sfe_open_worker_thread(struct worker *wrk, void *priv)
AZ(pthread_mutex_lock(&sow->mtx)); AZ(pthread_mutex_lock(&sow->mtx));
AZ(sow->wrk); AZ(sow->wrk);
sow->wrk = wrk; sow->wrk = wrk;
assert(sow->state == SOW_STARTING);
sow->state = SOW_RUNNING;
AZ(pthread_cond_signal(&sow->cond)); AZ(pthread_cond_signal(&sow->cond));
AZ(pthread_cond_wait(&sow->cond, &sow->mtx)); while (sow->state < SOW_STOPPING)
AZ(pthread_cond_wait(&sow->cond, &sow->mtx));
AZ(sow->wrk); AZ(sow->wrk);
sow->state = SOW_DONE;
AZ(pthread_mutex_unlock(&sow->mtx)); AZ(pthread_mutex_unlock(&sow->mtx));
return (NULL); return (NULL);
} }
...@@ -2247,9 +2260,12 @@ sfe_open_worker_init(struct sfe_open_worker_priv *sow) ...@@ -2247,9 +2260,12 @@ sfe_open_worker_init(struct sfe_open_worker_priv *sow)
AZ(pthread_cond_init(&sow->cond, NULL)); AZ(pthread_cond_init(&sow->cond, NULL));
AZ(pthread_mutex_lock(&sow->mtx)); AZ(pthread_mutex_lock(&sow->mtx));
assert(sow->state == SOW_INIT);
sow->state = SOW_STARTING;
WRK_BgThread(&sow->thr, "sfe-open-worker", WRK_BgThread(&sow->thr, "sfe-open-worker",
sfe_open_worker_thread, sow); sfe_open_worker_thread, sow);
AZ(pthread_cond_wait(&sow->cond, &sow->mtx)); while (sow->state < SOW_RUNNING)
AZ(pthread_cond_wait(&sow->cond, &sow->mtx));
AN(sow->wrk); AN(sow->wrk);
//lint -e{454} mutex //lint -e{454} mutex
return (sow->wrk); return (sow->wrk);
...@@ -2271,6 +2287,10 @@ sfe_open_worker_fini(struct sfe_open_worker_priv *sow) ...@@ -2271,6 +2287,10 @@ sfe_open_worker_fini(struct sfe_open_worker_priv *sow)
Pool_Sumstat(sow->wrk); Pool_Sumstat(sow->wrk);
sow->wrk = NULL; sow->wrk = NULL;
assert(sow->state == SOW_RUNNING);
sow->state = SOW_STOPPING;
AZ(pthread_cond_signal(&sow->cond)); AZ(pthread_cond_signal(&sow->cond));
//lint -e{455} mutex //lint -e{455} mutex
AZ(pthread_mutex_unlock(&sow->mtx)); AZ(pthread_mutex_unlock(&sow->mtx));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment