X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fjobs.c;h=1ed20fcb3a57722cfa1fcab81d1704f4bfbf5dc5;hb=9fe2dfd3c4df334607083f989346090e1051a565;hp=fa94ef18b6aad83f70a1118cb55053ad16e2d390;hpb=ca2051a26b74e1140cf2ca3ea0c82c1eed5bce28;p=src%2Fapp-framework-binder.git diff --git a/src/jobs.c b/src/jobs.c index fa94ef18..1ed20fcb 100644 --- a/src/jobs.c +++ b/src/jobs.c @@ -18,6 +18,7 @@ #define _GNU_SOURCE #include +#include #include #include #include @@ -39,6 +40,9 @@ #define sig_monitor(to,cb,arg) (cb(0,arg)) #endif +#define EVENT_TIMEOUT_TOP ((uint64_t)-1) +#define EVENT_TIMEOUT_CHILD ((uint64_t)10000) + /** Internal shortcut for callback */ typedef void (*job_cb_t)(int, void*, void *, void*); @@ -61,6 +65,7 @@ struct events { struct events *next; struct sd_event *event; + uint64_t timeout; unsigned runs: 1; }; @@ -276,7 +281,7 @@ static void events_call(int signum, void *arg) { struct events *events = arg; if (!signum) - sd_event_run(events->event, (uint64_t) -1); + sd_event_run(events->event, events->timeout); } /** @@ -291,6 +296,7 @@ static void thread_run(volatile struct thread *me) struct thread **prv; struct job *job; struct events *events; + uint64_t evto; /* initialize description of itself and link it in the list */ me->tid = pthread_self(); @@ -300,9 +306,11 @@ static void thread_run(volatile struct thread *me) me->upper = current; if (current) { current->lowered = 1; + evto = EVENT_TIMEOUT_CHILD; } else { started++; sig_monitor_init_timeouts(); + evto = EVENT_TIMEOUT_TOP; } me->next = threads; threads = (struct thread*)me; @@ -341,6 +349,7 @@ static void thread_run(volatile struct thread *me) if (events) { /* run the events */ events->runs = 1; + events->timeout = evto; me->events = events; pthread_mutex_unlock(&mutex); sig_monitor(0, events_call, events);