X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fjobs.c;h=e75a11707c7174a5d4bb8445160bb6c86243b0ac;hb=refs%2Fheads%2Fsandbox%2FDDTLK%2Fpakage;hp=f5c9ddea2c66fc774925e8bd7b69e2ff3d904f07;hpb=48df1b4c1e9d34ab8cafe0f496ddac299a00e00a;p=src%2Fapp-framework-binder.git diff --git a/src/jobs.c b/src/jobs.c index f5c9ddea..e75a1170 100644 --- a/src/jobs.c +++ b/src/jobs.c @@ -45,10 +45,6 @@ #include "sig-monitor.h" #include "verbose.h" -#if defined(REMOVE_SYSTEMD_EVENT) -#include "fdev-epoll.h" -#endif - #define EVENT_TIMEOUT_TOP ((uint64_t)-1) #define EVENT_TIMEOUT_CHILD ((uint64_t)10000) @@ -131,11 +127,6 @@ static struct job *free_jobs; /* event loop */ static struct evloop evloop; -#if defined(REMOVE_SYSTEMD_EVENT) -static struct fdev_epoll *fdevepoll; -static int waitevt; -#endif - /** * Create a new job with the given parameters * @param group the group of the job @@ -272,23 +263,6 @@ static void job_cancel(int signum, void *arg) job->callback(SIGABRT, job->arg); } -#if defined(REMOVE_SYSTEMD_EVENT) -/** - * Gets a fdev_epoll item. - * @return a fdev_epoll or NULL in case of error - */ -static struct fdev_epoll *get_fdevepoll() -{ - struct fdev_epoll *result; - - result = fdevepoll; - if (!result) - result = fdevepoll = fdev_epoll_create(); - - return result; -} -#endif - /** * Monitored normal callback for events. * This function is called by the monitor @@ -363,7 +337,7 @@ static void evloop_release() { struct thread *nh, *ct = current_thread; - if (evloop.holder == ct) { + if (ct && evloop.holder == ct) { nh = ct->nholder; evloop.holder = nh; if (nh) @@ -381,6 +355,9 @@ static int evloop_get() if (evloop.holder) return evloop.holder == ct; + if (!evloop.sdev) + return 0; + ct->nholder = NULL; evloop.holder = ct; return 1; @@ -417,29 +394,13 @@ static void evloop_acquire() } } -#if defined(REMOVE_SYSTEMD_EVENT) -/** - * Monitored normal loop for waiting events. - * @param signum 0 on normal flow or the number - * of the signal that interrupted the normal - * flow - * @param arg the events to run - */ -static void monitored_wait_and_dispatch(int signum, void *arg) -{ - struct fdev_epoll *fdev_epoll = arg; - if (!signum) { - fdev_epoll_wait_and_dispatch(fdev_epoll, -1); - } -} -#endif - /** * Enter the thread * @param me the description of the thread to enter */ static void thread_enter(volatile struct thread *me) { + evloop_release(); /* initialize description of itself and link it in the list */ me->tid = pthread_self(); me->stop = 0; @@ -501,7 +462,6 @@ static void thread_run_internal(volatile struct thread *me) /* release the run job */ job_release(job); -#if !defined(REMOVE_SYSTEMD_EVENT) /* no job, check event loop wait */ } else if (evloop_get()) { if (evloop.state != 0) { @@ -524,24 +484,6 @@ static void thread_run_internal(volatile struct thread *me) pthread_cond_wait(&cond, &mutex); me->waits = 0; running++; -#else - } else if (waitevt) { - /* no job and not events */ - running--; - if (!running) - ERROR("Entering job deep sleep! Check your bindings."); - me->waits = 1; - pthread_cond_wait(&cond, &mutex); - me->waits = 0; - running++; - } else { - /* wait for events */ - waitevt = 1; - pthread_mutex_unlock(&mutex); - sig_monitor(0, monitored_wait_and_dispatch, get_fdevepoll()); - pthread_mutex_lock(&mutex); - waitevt = 0; -#endif } } /* cleanup */ @@ -833,15 +775,6 @@ static int on_evloop_efd(sd_event_source *s, int fd, uint32_t revents, void *use return 1; } -/* temporary hack */ -#if !defined(REMOVE_SYSTEMD_EVENT) -__attribute__((unused)) -#endif -static void evloop_callback(void *arg, uint32_t event, struct fdev *fdev) -{ - sig_monitor(0, evloop_run, arg); -} - /** * Gets a sd_event item for the current thread. * @return a sd_event or NULL in case of error @@ -870,7 +803,6 @@ static struct sd_event *get_sd_event_locked() rc = sd_event_add_io(evloop.sdev, NULL, evloop.efd, EPOLLIN, on_evloop_efd, NULL); if (rc < 0) { ERROR("can't register eventfd"); -#if !defined(REMOVE_SYSTEMD_EVENT) sd_event_unref(evloop.sdev); evloop.sdev = NULL; error2: @@ -878,25 +810,6 @@ error2: error1: return NULL; } -#else - goto error3; - } - /* handle the event loop */ - evloop.fdev = fdev_epoll_add(get_fdevepoll(), sd_event_get_fd(evloop.sdev)); - if (!evloop.fdev) { - ERROR("can't create fdev"); -error3: - sd_event_unref(evloop.sdev); -error2: - close(evloop.efd); -error1: - memset(&evloop, 0, sizeof evloop); - return NULL; - } - fdev_set_autoclose(evloop.fdev, 0); - fdev_set_events(evloop.fdev, EPOLLIN); - fdev_set_callback(evloop.fdev, evloop_callback, NULL); -#endif } /* acquire the event loop */ @@ -945,23 +858,6 @@ struct sd_event *jobs_get_sd_event() return result; } -#if defined(REMOVE_SYSTEMD_EVENT) -/** - * Gets the fdev_epoll item. - * @return a fdev_epoll or NULL in case of error - */ -struct fdev_epoll *jobs_get_fdev_epoll() -{ - struct fdev_epoll *result; - - pthread_mutex_lock(&mutex); - result = get_fdevepoll(); - pthread_mutex_unlock(&mutex); - - return result; -} -#endif - /** * Enter the jobs processing loop. * @param allowed_count Maximum count of thread for jobs including this one