Skip to content

Commit 8ecd30f

Browse files
authored
[QC-403] Protect pendingInfoRegions from concurrent access (#4371)
1 parent 19b763d commit 8ecd30f

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

Framework/Core/include/Framework/DataProcessingDevice.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <fairmq/FairMQParts.h>
2929

3030
#include <memory>
31+
#include <mutex>
3132

3233
namespace o2::framework
3334
{
@@ -129,6 +130,7 @@ class DataProcessingDevice : public FairMQDevice
129130
uint64_t mBeginIterationTimestamp = 0; /// The timestamp of when the current ConditionalRun was started
130131
DataProcessingStats mStats; /// Stats about the actual data processing.
131132
std::vector<FairMQRegionInfo> mPendingRegionInfos; /// A list of the region infos not yet notified.
133+
std::mutex mRegionInfoMutex;
132134
enum TerminationPolicy mErrorPolicy = TerminationPolicy::WAIT; /// What to do when an error arises
133135
bool mWasActive = false; /// Whether or not the device was active at last iteration.
134136
};

Framework/Core/src/DataProcessingDevice.cxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,8 @@ void on_signal_callback(uv_signal_t* handle, int signum)
274274
void DataProcessingDevice::InitTask()
275275
{
276276
for (auto& channel : fChannels) {
277-
channel.second.at(0).Transport()->SubscribeToRegionEvents([& pendingRegionInfos = mPendingRegionInfos](FairMQRegionInfo info) {
277+
channel.second.at(0).Transport()->SubscribeToRegionEvents([& pendingRegionInfos = mPendingRegionInfos, &regionInfoMutex = mRegionInfoMutex](FairMQRegionInfo info) {
278+
std::lock_guard<std::mutex> lock(regionInfoMutex);
278279
LOG(debug) << ">>> Region info event" << info.event;
279280
LOG(debug) << "id: " << info.id;
280281
LOG(debug) << "ptr: " << info.ptr;

0 commit comments

Comments
 (0)