JDK-8078490 : Missed submissions in ForkJoinPool
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.util.concurrent
  • Affected Version: 8u40,9
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2015-04-23
  • Updated: 2016-08-24
  • Resolved: 2015-04-27
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 JDK 9
8u60Fixed 9 b63Fixed
Description
A task submitted to a ForkJoinPool can fail to execute if the pool is of a certain size and the task is never joined.

For a reproducible test case see:

  http://cs.oswego.edu/pipermail/concurrency-interest/2015-April/014240.html

Comments
The simplest fix for now is to strengthen the write of the qlock in ForkJoinPool.externalPush from a release write to a volatile write (resulting in a StoreLoad barrier and memory fence on x86).
23-04-2015