From 1348d1c07dbda69c32317738b8e9c69734f181c3 Mon Sep 17 00:00:00 2001 From: Saya Sugiura Date: Tue, 22 May 2018 20:40:51 +0900 Subject: lib: daemon: Fix sem lock potential issue sem_wait may return an error if a signal is received while waiting for the lock,and therefore not take the lock before returning. Changed to have a while loop. Signed-off-by: Saya Sugiura --- src/daemon/dlt_daemon_common.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/daemon/dlt_daemon_common.h b/src/daemon/dlt_daemon_common.h index 112cb92..be29bca 100644 --- a/src/daemon/dlt_daemon_common.h +++ b/src/daemon/dlt_daemon_common.h @@ -97,8 +97,12 @@ extern "C" { /* Use a semaphore or mutex from your OS to prevent concurrent access to the DLT buffer. */ -# define DLT_DAEMON_SEM_LOCK() { sem_wait(&dlt_daemon_mutex); } -# define DLT_DAEMON_SEM_FREE() { sem_post(&dlt_daemon_mutex); } +#define DLT_DAEMON_SEM_LOCK() do{\ + while ((sem_wait(&dlt_daemon_mutex) == -1) && (errno == EINTR)) \ + continue; /* Restart if interrupted */ \ + } while(0) + +#define DLT_DAEMON_SEM_FREE() { sem_post(&dlt_daemon_mutex); } extern sem_t dlt_daemon_mutex; /** -- cgit v1.2.1