The first iteration of executor loop waited for the request without
actually checking that there is no request in the queue. Therefore,
when the client sent the request before the executor called
fosa_cond_wait() for the first time, the executor blocked indefinitely.
fosa_mutex_lock(&executor->mutex);
while (1) {
- fosa_cond_wait(&executor->new_request_in_empty_list,
- &executor->mutex);
while (!forb_exec_req_nolock_is_empty(executor)) {
forb_exec_req_t *exec_req;
exec_req = forb_exec_req_nolock_cut_first(executor);
fosa_mutex_lock(&executor->mutex);
}
+ fosa_cond_wait(&executor->new_request_in_empty_list,
+ &executor->mutex);
}
fosa_mutex_unlock(&executor->mutex);
ret: