summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorMatthew Baulch <baulch.matt@gmail.com>2016-07-11 15:10:54 +1000
committerMatthew Baulch <baulch.matt@gmail.com>2016-07-11 15:10:54 +1000
commit90a5edfa6dc6ac781ddacbba07c8e10bd9aee871 (patch)
tree88eb0ebb25265ac7a8cc5f12b15b3768451a24a6 /lib
parentd7e172a6bc351ed926f93b77a14fc5cddbce3293 (diff)
downloadNim-90a5edfa6dc6ac781ddacbba07c8e10bd9aee871.tar.gz
Fix #4422: Reset queue element on pop. Prevent NimVM confusion. Help GC.
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/collections/queues.nim2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/pure/collections/queues.nim b/lib/pure/collections/queues.nim
index 911816518..399e4d413 100644
--- a/lib/pure/collections/queues.nim
+++ b/lib/pure/collections/queues.nim
@@ -152,11 +152,13 @@ proc add*[T](q: var Queue[T], item: T) =
   q.data[q.wr] = item
   q.wr = (q.wr + 1) and q.mask
 
+proc default[T](t: typedesc[T]): T {.inline.} = discard
 proc pop*[T](q: var Queue[T]): T {.inline, discardable.} =
   ## Remove and returns the first (oldest) element of the queue `q`.
   emptyCheck(q)
   dec q.count
   result = q.data[q.rd]
+  q.data[q.rd] = default(type(result))
   q.rd = (q.rd + 1) and q.mask
 
 proc enqueue*[T](q: var Queue[T], item: T) =