Affects Version/s: Scala 2.9.1, Scala 2.9.2
Scala 2.9.1 / 2.9.2. (Not environment-specific, but observed on 2.6.32-38-generic #83-Ubuntu SMP x86_64 and Mac OS X Snow Leopard x64, Java 1.6.0_30-b12). One a quad-core box with HT, the other a 12-core with HT.
There appears to be an issue with the version of the JSR166 LinkedTransferQueue that ships with Scala 2.9.2 (also confirmed under 2.9.1) that can result in calls to LTQ.size() spinning infinitely and failing to return. This issue does not occur when using the latest version of LinkedTransferQueue in JSR166y.
We've run into this issue in production at Boundary a few times and finally sat down to reproduce it. Fortunately, it is very easy to trigger and has been fixed upstream in the JSR166 project.
Steps to reproduce in Scala 2.9.2:
1. Run the attached "Repro.scala" sample program with: scala Repro.scala
2. Observe output similar to bug-reproduced.txt (attached)
3. Notice that calls to .size() stop increasing as the call does not return.
Steps to demonstrate success with the latest version of JSR166:
1. Fetch the latest JSR166 at http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166y.jar
2. Replace "import scala.concurrent.forkjoin.LinkedTransferQueue" with
"import jsr166y.LinkedTransferQueue" in Repro.scala below.
3. Run the "Repo.scala" sample program with: scala -cp jsr166y.jar Repro.scala
4. Observe output similar to bug-resolved.txt (attached)
If possible, I would recommend upgrading this package (or at least LinkedTransferQueue) to the latest available release of JSR166.
NB: This report and the following attachments can also be viewed as a Gist for your convenience: https://gist.github.com/3025111