RFR: 8214556: Crash in DependencyContext::remove_dependent_nmethod still happens
vladimir.kozlov at oracle.com
Mon Dec 3 15:47:34 UTC 2018
On 12/3/18 7:29 AM, Erik Österlund wrote:
> Unfortunately, even after 8213565, there are still crashes in DependencyContext::remove_dependent_nmethod.
> The claiming mechanism I used for dependency context cleanup used the safepoint counter as a clock source for
> monotonically inrcemented cleaning epochs. What I forgot for a moment while fixing this, is that VM operations may be
> coalesced into the same safepoint. If two GC operations run in the same safepoint, dependency context cleaning will only
> run for the first GC operation, not any subsequent one (the cleanup tasks will appear to have already been claimed),
> causing stale dependency contexts to remain with pointers to unloaded nmethods. This would cause very intermittent
> crashes in subsequent operations on those dependency contexts such as the crashes that have been observed.
> I fixed this by creating a stand-alone counter incremented each cleanup epoch, instead of using the safepoint counter
> for this.
> I have run this through tier1-6 on linux twice, I've also run tier1-3 on all platforms twice, and another tier1 on
> windows. Having said that, it's a very intermittent bug... but at least I know this is wrong, can cause these crashes,
> and needs to be fixed.
More information about the hotspot-compiler-dev