JDK-8184337 : CodeCache::get_code_cache_containing wrongly asserts that start can not be NULL
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 10
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2017-07-13
  • Updated: 2020-09-01
  • Resolved: 2017-07-13
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 10
10 b21Fixed
Related Reports
Relates :  
Description
The assert added in the implementation of get_code_cache_containing is superfluous (if start is NULL, returning NULL is proper semantics, and will be the case), and wrong, as some tests in nightly have been seen to intermittently fail when capturing certain stack traces.
Comments
Call stack: # Internal Error (/opt/jprt/T/P1/102055.eosterlu/s/hotspot/src/share/vm/code/codeCache.cpp:426), pid=25368, tid=13621 # assert(start != __null) failed: start is null # V [libjvm.so+0x97a5a0] report_vm_error(char const*, int, char const*, char const*, ...)+0x60;; report_vm_error(char const*, int, char const*, char const*, ...)+0x60 V [libjvm.so+0x89db17] CodeCache::get_code_heap_containing(void*)+0x1d7;; CodeCache::get_code_heap_containing(void*)+0x1d7 V [libjvm.so+0x89e906] CodeCache::find_blob_unsafe(void*)+0x26;; CodeCache::find_blob_unsafe(void*)+0x26 V [libjvm.so+0xad882c] frame::safe_for_sender(JavaThread*)+0x5cc;; frame::safe_for_sender(JavaThread*)+0x5cc V [libjvm.so+0x1432458] JavaThread::pd_get_top_frame_for_profiling(frame*, void*, bool)+0x188;; JavaThread::pd_get_top_frame_for_profiling(frame*, void*, bool)+0x188 frame::safe_for_sender() initialize sender_pc = NULL and then set it only if current frame is Interpreted. After that it calls find_blob_unsafe() passing NULL to it in other cases: // We must always be able to find a recognizable pc CodeBlob* sender_blob = CodeCache::find_blob_unsafe(sender_pc); if (sender_pc == NULL || sender_blob == NULL) { return false; } The code assumes that find_blob_unsafe() can handle NULL value in production. It is a little surprise that we hit the assert only in few tests.
13-07-2017

ILW = Assert is too strong, introduced by JDK-8183573 and triggered by several tests, no workaround = MMH = P3
13-07-2017