diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-07-29 17:27:03 -0700 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-07-29 17:27:03 -0700 |
commit | a72f79abf5845d25c847f7d7cde6d28a9d15612e (patch) | |
tree | e2c8669276a0ae7ddf8014136d3bedc2ac753dc9 /test/files/run/t7336.scala | |
parent | 20cd9474f0a22950c905badb81fb6eeebdf00b34 (diff) | |
parent | 1e5bfdb117c1cab659456949549765084081d534 (diff) | |
download | scala-a72f79abf5845d25c847f7d7cde6d28a9d15612e.tar.gz scala-a72f79abf5845d25c847f7d7cde6d28a9d15612e.tar.bz2 scala-a72f79abf5845d25c847f7d7cde6d28a9d15612e.zip |
Merge remote-tracking branch 'scala/2.10.x' into merge-2.10.x
Conflicts:
bincompat-backward.whitelist.conf
bincompat-forward.whitelist.conf
src/compiler/scala/reflect/reify/phases/Reshape.scala
src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
src/compiler/scala/tools/nsc/transform/Mixin.scala
src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
src/compiler/scala/tools/nsc/typechecker/Typers.scala
src/library/scala/concurrent/impl/Promise.scala
src/reflect/scala/reflect/internal/StdAttachments.scala
test/files/neg/macro-override-macro-overrides-abstract-method-b.check
test/files/run/t7569.check
Diffstat (limited to 'test/files/run/t7336.scala')
-rw-r--r-- | test/files/run/t7336.scala | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/files/run/t7336.scala b/test/files/run/t7336.scala new file mode 100644 index 0000000000..ace83f2c1f --- /dev/null +++ b/test/files/run/t7336.scala @@ -0,0 +1,31 @@ +import scala.concurrent.Await +import scala.concurrent.ExecutionContext.Implicits.global +import scala.concurrent.Future +import scala.concurrent.duration.Duration + +/** This test uses recursive calls to Future.flatMap to create arrays whose + * combined size is slightly greater than the JVM heap size. A previous + * implementation of Future.flatMap would retain references to each array, + * resulting in a speedy OutOfMemoryError. Now, each array should be freed soon + * after it is created and the test should complete without problems. + */ +object Test { + def main(args: Array[String]) { + def loop(i: Int, arraySize: Int): Future[Unit] = { + val array = new Array[Byte](arraySize) + Future.successful(i).flatMap { i => + if (i == 0) { + Future.successful(()) + } else { + array.size // Force closure to refer to array + loop(i - 1, arraySize) + } + + } + } + + val arraySize = 1000000 + val tooManyArrays = (Runtime.getRuntime().totalMemory() / arraySize).toInt + 1 + Await.ready(loop(tooManyArrays, arraySize), Duration.Inf) + } +}
\ No newline at end of file |