RFR(S): 8061256: com/sun/management/DiagnosticCommandMBean/DcmdMBeanPermissionsTest.java timed out

Albert Noll albert.noll at oracle.com
Fri Nov 14 09:59:32 UTC 2014


Hi Nils,


On 11/14/2014 10:43 AM, Nils Eliasson wrote:
>
> On 2014-11-13 16:36, Albert Noll wrote:
>> Hi Nils,
>>
>> On 11/13/2014 03:58 PM, Albert Noll wrote:
>>> Hi Nils,
>>>
>>> CompileQueue::lock() always returns MethodCompileQueue_lock ( see 
>>> init_compiler_sweeper_threads() ). It seems that your changes don't 
>>> change existing behavior, or am I missing something? Note that we 
>>> have 2 compilation queues, but only 1 lock.
>>>
>> It seems that I missed the most important parts of you change indeed. 
>> Is it right that
>> Mode evaluation_mode() const { return _no_safepoint; }
>>
>> makes the VM operation not execute at a safepoint? I have a question 
>> nevertheless. Why did you choose to return '_no_safepoint'  and not 
>> '_concurrent'?
>
> The diagnostic commands run in their own thread, and that thread still 
> has to wait for the output. Running the command cuncurrently would 
> require some care with how the operation is allocated so that it can 
> be passed to the VM_thread and be enqueued there.
>
Thanks for the explanation.

Best,
Albert
> Regards,
> Nils
>
>>
>> Best,
>> Albert
>>
>>> On 11/13/2014 03:11 PM, Nils Eliasson wrote:
>>>> Hi,
>>>>
>>>> Please review this small change.
>>>>
>>>> 1) Fixing a deadlock in diagnostic command dcmd 
>>>> print_compile_queues - between the CompileQueue_lock and 
>>>> safepointing. The CompileQueue_lock requires that we are not at a 
>>>> safepoint when taking it. Otherwise a java-thread that already 
>>>> holds the lock will block when trying to get another lock. In this 
>>>> specific case the compiler threads are Java threads, they take the 
>>>> CompileQueue_lock frequently and some time takes the 
>>>> CompileTaskAlloc_lock after that.
>>>>
>>>> Fixing this by making the diagnostic command not request a safepoint,
>>>>
>>>> 2) Refactoring away the lock() accessor in CompileQueue and stating 
>>>> the lock explicitly. This removes an element of surprise and makes 
>>>> it easier understanding the code.
>>> What element of surprise are you talking about? Personally, I prefer 
>>> the current design, i.e., getting the lock by calling a function 
>>> instead of referencing a global variable directly. If we ever decide 
>>> to go for a 2 compile queue locks (I think that makes sense since we 
>>> have two compilation queues), we would have to introduce the 
>>> functions again.
>>>
>>> Best,
>>> Albert
>>>
>>>
>>>> webrev: http://cr.openjdk.java.net/~neliasso/8061256/webrev.02/
>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8061256
>>>>
>>>> Thanks,
>>>> Nils Eliasson
>>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20141114/799be12a/attachment.html>


More information about the hotspot-compiler-dev mailing list