<AWT Dev> Code Review Request for CR 7128738 - dragged dialog freezes system on dispose
Oleg Pekhovskiy
oleg.pekhovskiy at oracle.com
Wed Mar 14 13:54:23 PDT 2012
Hi Anthony,
thanks you for your proposal!
Freezing behavior occurs only until JVM finishes, when all other java
objects are disposed.
In example provided in CR's evaluation field the primary frame prevents
JVM from finishing, that causes freezing.
So, the test, I propose, disposes the primary frame, that eliminates
freezing:
http://cr.openjdk.java.net/~bagiras/8/7128738.2
Thanks,
Oleg
3/14/2012 6:16 AM, Anthony Petrov wrote:
> Hi Oleg,
>
> The fix looks good to me. It would be cool to write a regression test
> for the issue, btw. You could start dragging a frame using Robot, and
> then call dispose() a couple seconds before releasing a mouse button.
> The test would fail by time-out w/o the fix.
>
> --
> best regards,
> Anthony
>
> On 3/14/2012 1:54 AM, Oleg Pekhovskiy wrote:
>> Hi guys,
>>
>> please review the fix for:
>> http://bugs.sun.com/view_bug.do?bug_id=7128738
>>
>> webrev:
>> http://cr.openjdk.java.net/~bagiras/7128738.1
>>
>> Description:
>>
>> Entering 'move window' mode clicking window title bar sends
>> WM_SYSCOMMAND with SC_MOVE inside WM_NCLBUTTONDOWN.
>> As a result additional message pump (for mouse capture) is created
>> blocking the handlers' chain WM_NCLBUTTONDOWN -> WM_SYSCOMMAND.
>>
>> So when JFrame.dispose() is called during this situation, deleting of
>> native AwtFrame object could NOT be done because
>> AwtComponent::CanBeDeleted() returns FALSE
>> (because of WM_NCLBUTTONDOWN & WM_SYSCOMMAND) and WM_AWT_DELETEOBJECT
>> message is reposted over and over again (eating CPU time).
>>
>> Thus I added ReleaseDragCapture(0) to AwtComponent::Dispose() to
>> release mouse capture and finish the additional message pump
>> so that AwtComponent::CanBeDeleted() returns TRUE and AwtFrame object
>> is deleted.
>>
>> Thanks,
>> Oleg
More information about the awt-dev
mailing list