lock to ensure json add header can be updated on the fly

This commit is contained in:
maliakal_d 2020-09-07 11:52:51 +02:00
parent f0c576c779
commit ea601fe1f7
2 changed files with 7 additions and 5 deletions

View File

@ -69,7 +69,7 @@ void DataStreamer::SetFlippedDataX(int fd) { flippedDataX = fd; }
void DataStreamer::SetAdditionalJsonHeader( void DataStreamer::SetAdditionalJsonHeader(
const std::map<std::string, std::string> &json) { const std::map<std::string, std::string> &json) {
std::lock guard<std::mutex> guard(additionalJsonMutex); std::lock_guard<std::mutex> lock(additionalJsonMutex);
additionalJsonHeader = json; additionalJsonHeader = json;
isAdditionalJsonUpdated = true; isAdditionalJsonUpdated = true;
} }
@ -235,10 +235,11 @@ int DataStreamer::SendHeader(sls_receiver_header *rheader, uint32_t size,
zHeader.completeImage = zHeader.completeImage =
(header.packetNumber < generalData->packetsPerFrame ? false : true); (header.packetNumber < generalData->packetsPerFrame ? false : true);
// update local copy only if it was updated (to prevent locking each time)
if (isAdditionalJsonUpdated) { if (isAdditionalJsonUpdated) {
std::lock_guard<std::mutex> guard(additionalalJsonMutex); std::lock_guard<std::mutex> lock(additionalJsonMutex);
localAdditionalJsonHeader = additionalJsonHeader; localAdditionalJsonHeader = additionalJsonHeader;
isAdditionalalJsonUpdated = false; isAdditionalJsonUpdated = false;
} }
zHeader.addJsonHeader = localAdditionalJsonHeader; zHeader.addJsonHeader = localAdditionalJsonHeader;

View File

@ -16,6 +16,7 @@ class DataStreamer;
class ZmqSocket; class ZmqSocket;
#include <map> #include <map>
#include <mutex>
class DataStreamer : private virtual slsDetectorDefs, public ThreadObject { class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
@ -170,10 +171,10 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
/** Used by streamer thread to update local copy (reduce number of locks /** Used by streamer thread to update local copy (reduce number of locks
* during streaming) */ * during streaming) */
std::atomic<bool>{false}; std::atomic<bool> isAdditionalJsonUpdated{false};
/** mutex to update json and to read and update local copy */ /** mutex to update json and to read and update local copy */
std::mutex additionalJsonMutex; mutable std::mutex additionalJsonMutex;
/** local copy of additional json header (it can be update on the fly) */ /** local copy of additional json header (it can be update on the fly) */
std::map<std::string, std::string> localAdditionalJsonHeader; std::map<std::string, std::string> localAdditionalJsonHeader;