From 4d02ef412baf22287912057076e2834e42da371a Mon Sep 17 00:00:00 2001 From: Mike Stroyan Date: Mon, 18 May 2015 16:33:03 -0600 Subject: Layers: fix MemTracker threading crash updateFenceTracking was using iterator for deleted item. --- layers/mem_tracker.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'layers/mem_tracker.cpp') diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index d87c8ee5..bce0cb80 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -213,7 +213,7 @@ static void updateFenceTracking( if (fenceMap.size() <= 0) return; - for (map::iterator ii=fenceMap.begin(); !found && ii!=fenceMap.end(); ++ii) { + for (map::iterator ii=fenceMap.begin(); !found && ii!=fenceMap.end();) { if ((*ii).second != NULL) { if (fence == ((*ii).second)->fence) { queue = ((*ii).second)->queue; @@ -221,7 +221,10 @@ static void updateFenceTracking( pQueueInfo->lastRetiredId = (*ii).first; found = true; } else { - deleteFenceInfo((*ii).first); + // Update iterator before deleting item it referred to + uint64_t fenceId = (*ii).first; + ++ii; + deleteFenceInfo(fenceId); } // Update fence state in fenceCreateInfo structure MT_OBJ_INFO* pObjectInfo = getObjectInfo(fence); -- cgit v1.2.3