aboutsummaryrefslogtreecommitdiff
path: root/profiling/server/src/timelineDecoder/TimelineDecoder.cpp
diff options
context:
space:
mode:
authorMatthew Bentham <matthew.bentham@arm.com>2022-01-10 13:34:12 +0000
committerTeresaARM <teresa.charlinreyes@arm.com>2022-01-12 20:09:14 +0000
commit6ae43c40de8cc35af3b3ba401fa6504ff782cd86 (patch)
tree1aff6d2280752fae0f2b5357be1588c1720df432 /profiling/server/src/timelineDecoder/TimelineDecoder.cpp
parent3ea0107ce9971cea47ac6e318cc9affbd9b6a989 (diff)
downloadarmnn-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.cpp28
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