summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/dlt/dlt_user.h7
-rw-r--r--src/daemon/dlt_daemon_common.h8
2 files changed, 11 insertions, 4 deletions
diff --git a/include/dlt/dlt_user.h b/include/dlt/dlt_user.h
index d736032..b885eaf 100644
--- a/include/dlt/dlt_user.h
+++ b/include/dlt/dlt_user.h
@@ -94,8 +94,11 @@ extern "C" {
# define DLT_USER_RESENDBUF_MAX_SIZE (DLT_USER_BUF_MAX_SIZE + 100) /**< Size of resend buffer; Max DLT message size is 1390 bytes plus some extra header space */
/* Use a semaphore or mutex from your OS to prevent concurrent access to the DLT buffer. */
-# define DLT_SEM_LOCK() { sem_wait(&dlt_mutex); }
-# define DLT_SEM_FREE() { sem_post(&dlt_mutex); }
+#define DLT_SEM_LOCK() do{\
+ while ((sem_wait(&dlt_mutex) == -1) && (errno == EINTR)) \
+ continue; /* Restart if interrupted */ \
+ } while(0)
+#define DLT_SEM_FREE() { sem_post(&dlt_mutex); }
/**
* This structure is used for every context used in an application.
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;
/**