aboutsummaryrefslogtreecommitdiffstats
path: root/src/jobs.c
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2019-05-28 09:37:11 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2019-05-29 08:58:56 +0000
commitf9c743046f94769c25ffc5bfd8d190c53cc4d613 (patch)
tree1a1acec49d5638a1e33e2ba0484b3465f6dd3de2 /src/jobs.c
parent02fe255525d3805350676445b5c8854afa46cbe4 (diff)
jobs: Fix infinite wait lock
The binder was sometime locked until an external event comes. This was discovered during stressing startup test that don't expect external inputs and that then waits for always without terminating. The issue came from a little hole in the management of the state of evmgr object. By design the evmgr has to be synchronised against concurrent accesses not by itself but by the integration. However, the state of "running" wasn't set in the code protected against concurent accesses. The new function allows the integrator to correctly set the state before releasing protection. Bug-AGL: SPEC-2459 Signed-off-by: José Bollo <jose.bollo@iot.bzh> Change-Id: Id75fd97c06d69666ced912a0a61380573dab31af
Diffstat (limited to 'src/jobs.c')
-rw-r--r--src/jobs.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/jobs.c b/src/jobs.c
index 936c6f1d..a518766b 100644
--- a/src/jobs.c
+++ b/src/jobs.c
@@ -389,6 +389,7 @@ static void thread_run_internal(volatile struct thread *me)
abort();
}
/* run the events */
+ evmgr_prepare_run(evmgr);
pthread_mutex_unlock(&mutex);
sig_monitor(0, (void(*)(int,void*))evmgr_job_run, evmgr);
pthread_mutex_lock(&mutex);