summaryrefslogtreecommitdiffstats
path: root/src/core/resources/qhandlemanager_p.h
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-08-11 10:08:21 +0200
committerPaul Lemire <paul.lemire@kdab.com>2016-08-11 20:17:43 +0000
commit71edf63d457de56740578939a62645ffbc71e040 (patch)
tree74ec5ed7e9dacec605d1dff7c0a122473a26c367 /src/core/resources/qhandlemanager_p.h
parentd6e836de654e6309eaf88d3ba907ab28026ddcb8 (diff)
HandleManager: do not allow counter to overflow
This could otherwise have happened if an element was acquired and released repeatedly. Change-Id: I29a327f32fdd9d9a02460bff26c9ff56fdd3dd61 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core/resources/qhandlemanager_p.h')
-rw-r--r--src/core/resources/qhandlemanager_p.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/core/resources/qhandlemanager_p.h b/src/core/resources/qhandlemanager_p.h
index 53439e13c..b41fc75b1 100644
--- a/src/core/resources/qhandlemanager_p.h
+++ b/src/core/resources/qhandlemanager_p.h
@@ -153,6 +153,9 @@ QHandle<T, INDEXBITS> QHandleManager<T, INDEXBITS>::acquire(T *d)
m_firstFreeEntry = m_entries[newIndex].m_nextFreeIndex;
m_entries[newIndex].m_nextFreeIndex = 0;
++m_entries[newIndex].m_counter;
+ // Check if the counter is about to overflow and reset if necessary
+ if (m_entries[newIndex].m_counter == qHandle::MaxCounter)
+ m_entries[newIndex].m_counter = 0;
if (m_entries[newIndex].m_counter == 0)
m_entries[newIndex].m_counter = 1;
m_entries[newIndex].m_active = true;