From d05f95deefca2836b9f4904711a7fda1c52cd85b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Thu, 18 Jan 2018 11:16:57 +0100 Subject: [PATCH] jobs: Split jobs_get_sd_event MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Provide a mutex locked internal function for getting the event loop: get_sd_event_locked Change-Id: I2635f901b3ec0fcf2c52f569f4c57cfd046601af Signed-off-by: José Bollo --- src/jobs.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/jobs.c b/src/jobs.c index 4b753fa1..d469c101 100644 --- a/src/jobs.c +++ b/src/jobs.c @@ -652,14 +652,12 @@ static int on_evloop_efd(sd_event_source *s, int fd, uint32_t revents, void *use * Gets a sd_event item for the current thread. * @return a sd_event or NULL in case of error */ -struct sd_event *jobs_get_sd_event() +static struct sd_event *get_sd_event_locked() { struct evloop *el; uint64_t x; int rc; - pthread_mutex_lock(&mutex); - /* creates the evloop on need */ el = &evloop[0]; if (!el->sdev) { @@ -686,7 +684,6 @@ struct sd_event *jobs_get_sd_event() error2: close(el->efd); error1: - pthread_mutex_unlock(&mutex); return NULL; } } @@ -706,10 +703,24 @@ error1: pthread_cond_wait(&el->cond, &mutex); } - pthread_mutex_unlock(&mutex); return el->sdev; } +/** + * Gets a sd_event item for the current thread. + * @return a sd_event or NULL in case of error + */ +struct sd_event *jobs_get_sd_event() +{ + struct sd_event *result; + + pthread_mutex_lock(&mutex); + result = get_sd_event_locked(); + pthread_mutex_unlock(&mutex); + + return result; +} + /** * Enter the jobs processing loop. * @param allowed_count Maximum count of thread for jobs including this one -- 2.16.6