<AWT Dev> Code Review Request for CR 7128738 - dragged dialog freezes system on dispose
Anthony Petrov
anthony.petrov at oracle.com
Mon Mar 19 08:28:35 PDT 2012
Hi Oleg,
The fix looks fine. Thank you!
--
best regards,
Anthony
On 03/16/12 22:14, Oleg Pekhovskiy wrote:
> Hi Anthony,
>
> referring to 'waitForIdle()' method, as I understand, you're talking
> about platforms other than Windows, because it works as expected here.
> Right?
> Nevertheless, I added 1-sec delays between functional calls to guarantee
> the proper testing on all platforms.
> And also moved the test to 'test/java/awt/Frame'.
>
> Please, take a look at the final webrev:
> http://cr.openjdk.java.net/~bagiras/8/7128738.3
>
> Thank you,
> Oleg
>
> 3/16/2012 4:07 PM, Anthony Petrov wrote:
>> Hi Oleg,
>>
>> The test is good, although I suggest to insert manual delays (of
>> 500...1500 ms) between showing frames, clicking, calling dispose(),
>> etc. Unfortunately, the waitForIdle() alone doesn't guarantee much
>> when it comes to processing native events.
>>
>> Also, the test doesn't belong to the DnD area since the issue isn't
>> related to the AWT DnD API. The test should be in java/awt/Frame/
>> directory with the "toplevel" area.
>>
>> But otherwise the changes look fine, so provided the above suggestions
>> are applied, I'm approving the fix. Thanks!
>>
>> --
>> best regards,
>> Anthony
>>
>> On 3/15/2012 12:54 AM, Oleg Pekhovskiy wrote:
>>> 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