aboutsummaryrefslogtreecommitdiff
path: root/layers/mem_tracker.cpp
diff options
context:
space:
mode:
authorMike Stroyan <mike@LunarG.com>2015-05-18 16:33:03 -0600
committerMark Lobodzinski <mark@lunarg.com>2015-06-02 09:43:17 -0500
commit4d02ef412baf22287912057076e2834e42da371a (patch)
tree4061f0e71acdb98ca3255aa25e1ceb9b08a9d1b4 /layers/mem_tracker.cpp
parent3578be82f7746b36bef9552f237f7cd78a091de9 (diff)
downloadusermoji-4d02ef412baf22287912057076e2834e42da371a.tar.xz
Layers: fix MemTracker threading crash
updateFenceTracking was using iterator for deleted item.
Diffstat (limited to 'layers/mem_tracker.cpp')
-rw-r--r--layers/mem_tracker.cpp7
1 files changed, 5 insertions, 2 deletions
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<uint64_t, MT_FENCE_INFO*>::iterator ii=fenceMap.begin(); !found && ii!=fenceMap.end(); ++ii) {
+ for (map<uint64_t, MT_FENCE_INFO*>::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);