summaryrefslogtreecommitdiff
path: root/src/daemon
diff options
context:
space:
mode:
authorSaya Sugiura <ssugiura@jp.adit-jv.com>2018-05-22 20:40:51 +0900
committerSaya Sugiura <ssugiura@jp.adit-jv.com>2019-04-24 17:13:57 +0900
commit1348d1c07dbda69c32317738b8e9c69734f181c3 (patch)
tree2fe7669cd7d20bc2ee2d5ab5a24a6ebe2bd32ef5 /src/daemon
parent37e8bc12a7e86fa54b3a5f260b45fd730a5a59a6 (diff)
downloadDLT-daemon-1348d1c07dbda69c32317738b8e9c69734f181c3.tar.gz
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 <ssugiura@jp.adit-jv.com>
Diffstat (limited to 'src/daemon')
-rw-r--r--src/daemon/dlt_daemon_common.h8
1 files changed, 6 insertions, 2 deletions
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;
/**