JDK-8154529 : some places in the invoke.c that use InvokeRequest* not protected with invokerLock
  • Type: Bug
  • Component: core-svc
  • Sub-Component: debugger
  • Affected Version: 9
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2016-04-19
  • Updated: 2018-01-04
  • Resolved: 2016-05-08
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 9
9 b120Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Relates :  
Description
It seems, the invokerLock is to protect any uses of the 'request' pointer that points to the field ThreadNode.currentInvoke, not to protect the saveGlobalRef() call itself. So that, we have a hole in synchronization that was nicely discovered by Severin G in the fix for bug:
  https://bugs.openjdk.java.net/browse/JDK-8153711

Here are more places where the 'request' pointer is not protected with the invokerLock:
    invoker_enableInvokeRequests()
    invoker_isPending()
    invoker_isEnabled().

In general, these are pretty simple or rare cases that do not harm much.
The function invoker_isPending() is not used at all.
Comments
Posted for review: http://mail.openjdk.java.net/pipermail/serviceability-dev/2016-April/019518.html
26-04-2016

invoker_isPending() seems unused.
25-04-2016