]> rtime.felk.cvut.cz Git - frescor/forb.git/blobdiff - src/executor.c
forb: Fix deadlock in executor
[frescor/forb.git] / src / executor.c
index 55c240f4be65ba3ff7f63c77883fc87e047ca4bb..08e00680f448689f782d1b8b68cd167a3484cc96 100644 (file)
@@ -150,8 +150,6 @@ int forb_executor_run(forb_executor_t *executor)
        
        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);
@@ -161,6 +159,8 @@ int forb_executor_run(forb_executor_t *executor)
 
                        fosa_mutex_lock(&executor->mutex);
                }
+               fosa_cond_wait(&executor->new_request_in_empty_list,
+                              &executor->mutex);
        }
        fosa_mutex_unlock(&executor->mutex);
 ret: