summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/Iterator.scala
diff options
context:
space:
mode:
authorDavid Andrzejewski <david@sumologic.com>2012-04-04 09:26:34 -0700
committerPaul Phillips <paulp@improving.org>2012-04-06 11:57:41 -0700
commit581a2e1a9653b06b6d2c431070e6b1d21383285d (patch)
tree0e7265e799f926acd99fa1e377ba187a82cb17a4 /src/library/scala/collection/Iterator.scala
parente593d8b9ed6d8d98c698d0a7dc47c3341d59c357 (diff)
downloadscala-581a2e1a9653b06b6d2c431070e6b1d21383285d.tar.gz
scala-581a2e1a9653b06b6d2c431070e6b1d21383285d.tar.bz2
scala-581a2e1a9653b06b6d2c431070e6b1d21383285d.zip
fix memory leak in Iterator.++
Diffstat (limited to 'src/library/scala/collection/Iterator.scala')
-rw-r--r--src/library/scala/collection/Iterator.scala4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala
index 7b57a91c41..65de60c8fe 100644
--- a/src/library/scala/collection/Iterator.scala
+++ b/src/library/scala/collection/Iterator.scala
@@ -329,14 +329,16 @@ trait Iterator[+A] extends TraversableOnce[A] {
def ++[B >: A](that: => GenTraversableOnce[B]): Iterator[B] = new AbstractIterator[B] {
// optimize a little bit to prevent n log n behavior.
private var cur : Iterator[B] = self
+ private var selfExhausted : Boolean = false
// since that is by-name, make sure it's only referenced once -
// if "val it = that" is inside the block, then hasNext on an empty
// iterator will continually reevaluate it. (ticket #3269)
lazy val it = that.toIterator
// the eq check is to avoid an infinite loop on "x ++ x"
- def hasNext = cur.hasNext || ((cur eq self) && {
+ def hasNext = cur.hasNext || (!selfExhausted && {
it.hasNext && {
cur = it
+ selfExhausted = true
true
}
})