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)
return (ban);
}
enum sfe_open_worker_state {
SOW_INIT = 0,
SOW_STARTING,
SOW_RUNNING,
SOW_STOPPING,
SOW_DONE
};
struct sfe_open_worker_priv {
unsigned magic;
#define SFE_OPEN_WORKER_PRIV 0xe4711115
enum sfe_open_worker_state state;
pthread_mutex_t mtx;
pthread_cond_t cond;
......@@ -2231,9 +2240,13 @@ sfe_open_worker_thread(struct worker *wrk, void *priv)
AZ(pthread_mutex_lock(&sow->mtx));
AZ(sow->wrk);
sow->wrk = wrk;
assert(sow->state == SOW_STARTING);
sow->state = SOW_RUNNING;
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);
sow->state = SOW_DONE;
AZ(pthread_mutex_unlock(&sow->mtx));
return (NULL);
}
......@@ -2247,9 +2260,12 @@ sfe_open_worker_init(struct sfe_open_worker_priv *sow)
AZ(pthread_cond_init(&sow->cond, NULL));
AZ(pthread_mutex_lock(&sow->mtx));
assert(sow->state == SOW_INIT);
sow->state = SOW_STARTING;
WRK_BgThread(&sow->thr, "sfe-open-worker",
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);
//lint -e{454} mutex
return (sow->wrk);
......@@ -2271,6 +2287,10 @@ sfe_open_worker_fini(struct sfe_open_worker_priv *sow)
Pool_Sumstat(sow->wrk);
sow->wrk = NULL;
assert(sow->state == SOW_RUNNING);
sow->state = SOW_STOPPING;
AZ(pthread_cond_signal(&sow->cond));
//lint -e{455} mutex
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