Hi Vladimir,

Thanks for reviewing this change.

> CC to serviceability group.
> 
> I am for "always call notice_modification() in parse_stream()”.

This then:

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

Roland.

> 
> 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.
>> 

Reply via email to