From 0cdde3008c6a9135937a52c1d4b71754d834ab32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Fri, 4 Nov 2016 21:28:08 +0100 Subject: [PATCH] Fix range violation in ConsumableQueue. --- source/eventcore/internal/consumablequeue.d | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/eventcore/internal/consumablequeue.d b/source/eventcore/internal/consumablequeue.d index 95289b9..6bf8e3f 100644 --- a/source/eventcore/internal/consumablequeue.d +++ b/source/eventcore/internal/consumablequeue.d @@ -161,6 +161,7 @@ final class ConsumableQueue(T) m_consumedCount--; } } + m_first = m_first & m_capacityMask; } private ref T getPendingAt(size_t idx) @@ -210,4 +211,14 @@ unittest { assert(q.consumeOne == 6); assert(q.length == 0); assert(q.m_consumedCount == 0); + + foreach (i; 7 .. 15) q.put(i); + assert(q.consume.equal([7, 8, 9, 10, 11, 12, 13, 14])); + q.put(15); + assert(q.consume.equal([15])); + q.put(16); + assert(q.consume.equal([16])); + q.put(17); + assert(q.consume.equal([17])); + assert(q.consume.empty); }