8029383: assert(counter_changed) failed: failed dependencies, but counter didn't change

Roland Westrelin roland.westrelin at oracle.com
Mon Dec 9 09:03:31 PST 2013


http://cr.openjdk.java.net/~roland/8029383/webrev.00/

When an anonymous class is defined through Unsafe (not recorded in the system dictionary), SystemDictionary::notice_modification() is not called and failed dependencies can be missed when class loading happens concurrently with a compilation (for this test case, a new implementor for an interface).

There are 2 calls to SystemDictionary::parse_stream(). One is from jvmti and as I understand the call to SystemDictionary::notice_modification() once all new class definitions are done which is fine because this happens at a safepoint. The other call is when the class is defined through Unsafe. I added a call to SystemDictionary::notice_modification() in that case and it must happen with the CompileLock held. Maybe, we could as well always call notice_modification() in parse_stream() and remove the call from the jvmti code.

Roland.


More information about the hotspot-compiler-dev mailing list