mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-24 07:20:01 +02:00
lock to ensure json add header can be updated on the fly
This commit is contained in:
parent
f0c576c779
commit
ea601fe1f7
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user