diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-05-17 00:03:16 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-05-28 00:33:55 +0200 |
| commit | 65be48c492f118eaab3d87564f9b2a3163b0acd1 (patch) | |
| tree | 1d0726f6809fc0aaf759930ec5a54b2b12ce4ec8 | |
| parent | 2a651467edc28b1ebfc1c93036c89d5823be2b09 (diff) | |
Cleanup: coding style for Synch.
| -rw-r--r-- | src/lib/grok/messenger.h | 91 |
1 files changed, 52 insertions, 39 deletions
diff --git a/src/lib/grok/messenger.h b/src/lib/grok/messenger.h index 4a0fd3662..bd19438f6 100644 --- a/src/lib/grok/messenger.h +++ b/src/lib/grok/messenger.h @@ -184,79 +184,92 @@ struct MessengerInit }; -/*************************** Synchronization *******************************/ enum SynchDirection { SYNCH_SENT, SYNCH_RECEIVE_READY }; -struct Synch + +class Synch { - Synch(const std::string &sentSemName, const std::string &receiveReadySemName) - : sentSemName_(sentSemName), receiveReadySemName_(receiveReadySemName) +public: + Synch(std::string const& sent_sem_name, std::string const& receive_ready_sem_name) + : _sent_sem_name(sent_sem_name) + , _receive_ready_sem_name(receive_ready_sem_name) { // unlink semaphores in case of previous crash unlink(); open(); } + ~Synch() { close(); unlink(); } + void post(SynchDirection dir) { - auto sem = (dir == SYNCH_SENT ? sentSem_ : receiveReadySem_); - int rc = sem_post(sem); - if(rc) + auto sem = dir == SYNCH_SENT ? _sent_sem : _receive_ready_sem; + if (sem_post(sem)) { getMessengerLogger()->error("Error posting to semaphore: %s", strerror(errno)); + } } + void wait(SynchDirection dir) { - auto sem = dir == SYNCH_SENT ? sentSem_ : receiveReadySem_; - int rc = sem_wait(sem); - if(rc) + auto sem = dir == SYNCH_SENT ? _sent_sem : _receive_ready_sem; + if (sem_wait(sem)) { getMessengerLogger()->error("Error waiting for semaphore: %s", strerror(errno)); + } } - void open(void) + + void open() { - sentSem_ = sem_open(sentSemName_.c_str(), O_CREAT, 0666, 0); - if(!sentSem_) + _sent_sem = sem_open(_sent_sem_name.c_str(), O_CREAT, 0666, 0); + if (!_sent_sem) { getMessengerLogger()->error("Error opening shared memory: %s", strerror(errno)); - receiveReadySem_ = sem_open(receiveReadySemName_.c_str(), O_CREAT, 0666, 1); - if(!receiveReadySem_) + } + + _receive_ready_sem = sem_open(_receive_ready_sem_name.c_str(), O_CREAT, 0666, 1); + if (!_receive_ready_sem) { getMessengerLogger()->error("Error opening shared memory: %s", strerror(errno)); + } } - void close(void) + + void close() { - int rc = sem_close(sentSem_); - if(rc) - getMessengerLogger()->error("Error closing semaphore %s: %s", sentSemName_.c_str(), - strerror(errno)); - rc = sem_close(receiveReadySem_); - if(rc) - getMessengerLogger()->error("Error closing semaphore %s: %s", - receiveReadySemName_.c_str(), strerror(errno)); + if (sem_close(_sent_sem)) { + getMessengerLogger()->error("Error closing semaphore %s: %s", _sent_sem_name.c_str(), strerror(errno)); + } + + if (sem_close(_receive_ready_sem)) { + getMessengerLogger()->error("Error closing semaphore %s: %s", _receive_ready_sem_name.c_str(), strerror(errno)); + } } - void unlink(void) + + void unlink() { - int rc = sem_unlink(sentSemName_.c_str()); - if(rc == -1 && errno != ENOENT) - getMessengerLogger()->error("Error unlinking semaphore %s: %s", sentSemName_.c_str(), - strerror(errno)); - rc = sem_unlink(receiveReadySemName_.c_str()); - if(rc == -1 && errno != ENOENT) - getMessengerLogger()->error("Error unlinking semaphore %s: %s", - receiveReadySemName_.c_str(), strerror(errno)); - } - sem_t* sentSem_; - sem_t* receiveReadySem_; + int rc = sem_unlink(_sent_sem_name.c_str()); + if (rc == -1 && errno != ENOENT) { + getMessengerLogger()->error("Error unlinking semaphore %s: %s", _sent_sem_name.c_str(), strerror(errno)); + } + rc = sem_unlink(_receive_ready_sem_name.c_str()); + if (rc == -1 && errno != ENOENT) { + getMessengerLogger()->error("Error unlinking semaphore %s: %s", _receive_ready_sem_name.c_str(), strerror(errno)); + } + } - private: - std::string sentSemName_; - std::string receiveReadySemName_; +private: + sem_t* _sent_sem; + sem_t* _receive_ready_sem; + + std::string _sent_sem_name; + std::string _receive_ready_sem_name; }; + + struct SharedMemoryManager { static bool initShm(const std::string &name, size_t len, int* shm_fd, char** buffer) |
