diff options
| author | Mike Stroyan <mike@LunarG.com> | 2015-05-18 16:33:03 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2015-06-02 09:43:17 -0500 |
| commit | 4d02ef412baf22287912057076e2834e42da371a (patch) | |
| tree | 4061f0e71acdb98ca3255aa25e1ceb9b08a9d1b4 /layers/mem_tracker.cpp | |
| parent | 3578be82f7746b36bef9552f237f7cd78a091de9 (diff) | |
| download | usermoji-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.cpp | 7 |
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); |
