From 9a284f75c3709de2c3941c6567fc6b0bb055f196 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 16 Jul 2020 16:18:40 +0200 Subject: [PATCH] pthread mutex works on blackfin --- .../slsDetectorServer/src/sharedMemory.c | 15 +++++++-------- .../slsDetectorServer/src/slsDetectorServer.c | 1 - 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/slsDetectorServers/slsDetectorServer/src/sharedMemory.c b/slsDetectorServers/slsDetectorServer/src/sharedMemory.c index b2408b4b7..e471cfdfa 100644 --- a/slsDetectorServers/slsDetectorServer/src/sharedMemory.c +++ b/slsDetectorServers/slsDetectorServer/src/sharedMemory.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include #define SHM_NAME "sls_server_shared_memory" #define SHM_VERSION 0x200625 @@ -15,7 +15,7 @@ typedef struct Memory { int version; - sem_t sem; + pthread_mutex_t lock; enum runStatus scanStatus; // idle, running or error int scanStop; #ifdef VIRTUAL @@ -81,11 +81,10 @@ int sharedMemory_create(int port) { int sharedMemory_initialize() { shm->version = SHM_VERSION; - if (sem_init(&(shm->sem), 1, 1)) { - LOG(logERROR, ("Failed to initialize semaphore for shared memory\n")); - LOG(logERROR, ("ERror: %s\n", strerror(errno))); + if (pthread_mutex_init(&(shm->lock), NULL) != 0) { + LOG(logERROR, ("Failed to initialize pthread lock for shared memory\n")); return FAIL; - } + } shm->scanStatus = IDLE; shm->scanStop = 0; #ifdef VIRTUAL @@ -142,9 +141,9 @@ int sharedMemory_remove() { return OK; } -void sharedMemory_lock() { sem_wait(&(shm->sem)); } +void sharedMemory_lock() { pthread_mutex_lock(&(shm->lock)); } -void sharedMemory_unlock() { sem_post(&(shm->sem)); } +void sharedMemory_unlock() { pthread_mutex_unlock(&(shm->lock)); } #ifdef VIRTUAL void sharedMemory_setStatus(enum runStatus s) { diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c index 1d7aa125c..b5244ee46 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c @@ -30,7 +30,6 @@ extern int phaseShift; void error(char *msg) { perror(msg); } void sigInterruptHandler(int p) { - sharedMemory_detach(); sharedMemory_remove(); exit(-1); }