JDK-8059735 : make_not_entrant_or_zombie sees zombies
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 9
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2014-10-05
  • Updated: 2017-07-26
  • Resolved: 2014-10-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.
9 b36Fixed
Related Reports
Duplicate :  
Relates :  
make_not_entrant_or_zombie() is apparently being invoked on a zombie method. Presumably because of a race.

V  [libjvm.so+0x15f5530]  void VMError::report_and_die()+0x700;;  __1cHVMErrorOreport_and_die6M_v_+0x700
V  [libjvm.so+0xa71860]  void report_vm_error(const char*,int,const char*,const char*)+0x70;;  __1cPreport_vm_error6Fpkci11_v_+0x70
V  [libjvm.so+0x123b7a4]  bool nmethod::make_not_entrant_or_zombie(unsigned)+0x74;;  __1cHnmethodbAmake_not_entrant_or_zombie6MI_b_+0x74
V  [libjvm.so+0x14cbd48]  int NMethodSweeper::process_nmethod(nmethod*)+0x468;;  __1cONMethodSweeperPprocess_nmethod6FpnHnmethod__i_+0x468
V  [libjvm.so+0x14caddc]  void NMethodSweeper::sweep_code_cache()+0x894;;  __1cONMethodSweeperQsweep_code_cache6F_v_+0x894
V  [libjvm.so+0x14ca41c]  void NMethodSweeper::possibly_sweep()+0x39c;;  __1cONMethodSweeperOpossibly_sweep6F_v_+0x39c
V  [libjvm.so+0x9e34d8]  CompileTask*CompileQueue::get()+0x20;;  __1cMCompileQdDueueDget6M_pnLCompileTask__+0x20
V  [libjvm.so+0x9e6ea4]  void CompileBroker::compiler_thread_loop()+0x22c;;  __1cNCompileBrokerUcompiler_thread_loop6F_v_+0x22c
V  [libjvm.so+0x153689c]  void JavaThread::thread_main_inner()+0x26c;;  __1cKJavaThreadRthread_main_inner6M_v_+0x26c
V  [libjvm.so+0x15365b8]  void JavaThread::run()+0x500;;  __1cKJavaThreadDrun6M_v_+0x500
V  [libjvm.so+0x12ab86c]  java_start+0x3fc;;  java_start+0x3fc
C  [libc.so.1+0xe25bc]  _lwp_start+0x8;;  _lwp_start+0x8

Evaluation: In 'NMethodSweeper::process_nmethod' a non-entrant nmethod is processed and can be converted to zombie (line 549 of sweeper.cpp). To clean the IC stubs of that nmethod (see JDK-8058737) we acquire the CompiledIC_lock and check for a safepoint. In this case, there is a safepoint request and we block. During the safepoint a VM_Deoptimize operation is executed (due to classloading) and the non-entrant nmethod is set to zombie by 'CodeCache::make_marked_nmethods_zombies'. After the safepoint the sweeper continues and tries to set the nmethod to zombie again.