From 93fe8b8d9252297652d85d7f51965daa657676aa Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Thu, 2 Sep 2010 13:15:21 +0000 Subject: Merged revisions 22897 via svnmerge from https://lampsvn.epfl.ch/svn-repos/scala/scala/trunk ........ r22897 | dragos | 2010-09-01 18:01:59 +0200 (Wed, 01 Sep 2010) | 1 line Closes #1220. Stream.tail is now thread safe. Review by odersky. ........ --- src/library/scala/collection/immutable/Stream.scala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/library') diff --git a/src/library/scala/collection/immutable/Stream.scala b/src/library/scala/collection/immutable/Stream.scala index 7660a1e2c8..40f71aa845 100644 --- a/src/library/scala/collection/immutable/Stream.scala +++ b/src/library/scala/collection/immutable/Stream.scala @@ -557,10 +557,14 @@ object Stream extends SeqFactory[Stream] { final class Cons[+A](hd: A, tl: => Stream[A]) extends Stream[A] { override def isEmpty = false override def head = hd - private[this] var tlVal: Stream[A] = _ - def tailDefined = tlVal ne null + @volatile private[this] var tlVal: Stream[A] = _ + def tailDefined: Boolean = tlVal ne null override def tail: Stream[A] = { - if (!tailDefined) { tlVal = tl } + if (!tailDefined) + synchronized { + if (!tailDefined) tlVal = tl + } + tlVal } } -- cgit v1.2.3