CC to serviceability group.
I am for "always call notice_modification() in parse_stream()".
The method SystemDictionary::number_of_modifications() is used only by
ciEnv::system_dictionary_modification_counter_changed() which checks
only not equal state. So the value is not important, only difference.
Add new comment to separate from existing one. Otherwise it looks strange:
// But, do not add to system dictionary.
+ if (notice) {
+ notice_modification();
Thanks,
Vladimir
On 12/9/13 9:03 AM, Roland Westrelin wrote:
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.