diff options
author | Matthew Bentham <matthew.bentham@arm.com> | 2022-01-10 13:34:12 +0000 |
---|---|---|
committer | TeresaARM <teresa.charlinreyes@arm.com> | 2022-01-12 20:09:14 +0000 |
commit | 6ae43c40de8cc35af3b3ba401fa6504ff782cd86 (patch) | |
tree | 1aff6d2280752fae0f2b5357be1588c1720df432 /profiling/server/src/timelineDecoder/TimelineDecoder.cpp | |
parent | 3ea0107ce9971cea47ac6e318cc9affbd9b6a989 (diff) | |
download | armnn-6ae43c40de8cc35af3b3ba401fa6504ff782cd86.tar.gz |
Fix thread safety issues in TimelineDecoder and associated unit tests
Enforce serialized access to TimelineDecoder::m_Model by removing public
access funtion and replacing with an 'Apply' method taking a lambda and
uses a std::lock.
Use the new lambda when invoking callbacks.
Change-Id: I6ea2fbca990736f3be63e80897f175421f19f0c1
Signed-off-by: Matthew Bentham <matthew.bentham@arm.com>
Diffstat (limited to 'profiling/server/src/timelineDecoder/TimelineDecoder.cpp')
-rw-r--r-- | profiling/server/src/timelineDecoder/TimelineDecoder.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/profiling/server/src/timelineDecoder/TimelineDecoder.cpp b/profiling/server/src/timelineDecoder/TimelineDecoder.cpp index df967de1f5..6eaaff6e54 100644 --- a/profiling/server/src/timelineDecoder/TimelineDecoder.cpp +++ b/profiling/server/src/timelineDecoder/TimelineDecoder.cpp @@ -20,8 +20,9 @@ TimelineDecoder::TimelineStatus TimelineDecoder::CreateEntity(const Entity &enti { return TimelineStatus::TimelineStatus_Fail; } - m_OnNewEntityCallback(m_Model, entity); - + ApplyToModel([&](Model& m){ + m_OnNewEntityCallback(m, entity); + }); return TimelineStatus::TimelineStatus_Success; } @@ -31,7 +32,9 @@ TimelineDecoder::TimelineStatus TimelineDecoder::CreateEventClass(const EventCla { return TimelineStatus::TimelineStatus_Fail; } - m_OnNewEventClassCallback(m_Model, eventClass); + ApplyToModel([&](Model& m){ + m_OnNewEventClassCallback(m, eventClass); + }); return TimelineStatus::TimelineStatus_Success; } @@ -42,7 +45,9 @@ TimelineDecoder::TimelineStatus TimelineDecoder::CreateEvent(const Event &event) { return TimelineStatus::TimelineStatus_Fail; } - m_OnNewEventCallback(m_Model, event); + ApplyToModel([&](Model& m){ + m_OnNewEventCallback(m, event); + }); return TimelineStatus::TimelineStatus_Success; } @@ -53,7 +58,9 @@ TimelineDecoder::TimelineStatus TimelineDecoder::CreateLabel(const Label &label) { return TimelineStatus::TimelineStatus_Fail; } - m_OnNewLabelCallback(m_Model, label); + ApplyToModel([&](Model& m){ + m_OnNewLabelCallback(m, label); + }); return TimelineStatus::TimelineStatus_Success; } @@ -64,15 +71,12 @@ TimelineDecoder::TimelineStatus TimelineDecoder::CreateRelationship(const Relati { return TimelineStatus::TimelineStatus_Fail; } - m_OnNewRelationshipCallback(m_Model, relationship); + ApplyToModel([&](Model& m){ + m_OnNewRelationshipCallback(m, relationship); + }); return TimelineStatus::TimelineStatus_Success; } -const TimelineDecoder::Model &TimelineDecoder::GetModel() -{ - return m_Model; -} - TimelineDecoder::TimelineStatus TimelineDecoder::SetEntityCallback(OnNewEntityCallback cb) { if (cb == nullptr) @@ -323,4 +327,4 @@ void TimelineDecoder::printRelationships() } } // namespace pipe -} // namespace arm
\ No newline at end of file +} // namespace arm |