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

View File

@ -16,6 +16,7 @@ class DataStreamer;
class ZmqSocket;
#include <map>
#include <mutex>
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
* during streaming) */
std::atomic<bool>{false};
std::atomic<bool> isAdditionalJsonUpdated{false};
/** 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) */
std::map<std::string, std::string> localAdditionalJsonHeader;