<AWT Dev> Review Request for 8039081: [TEST_BUG] Test java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java fails

Prasanta Sadhukhan prasanta.sadhukhan at oracle.com
Fri Aug 5 07:19:37 UTC 2016



On 8/5/2016 12:39 PM, Ambarish Rapte wrote:
> Hi Prasanta,
>
> 	The popup peer is removed from TrayIcon.removeNotify().
> 	popup in XTrayIconPeer is reference to same object, hence not required to be disposed in XTrayIconPeer.
>
> 	The TrayIcon object was not getting Garbage collected because of few members of XTrayIconPeer. Hence this change cleans only these blocking references.
> 	Tooltip does not block from GC and gets garbage collected as the TrayIcon gets collected.
But we call

tooltip = new InfoWindow.Tooltip(eframe, target, this);
just like
balloon = new InfoWindow.Balloon(eframe, target, this);
so should it not get disposed like balloon?

Regards
Prasanta
> 	The test is updated,
> 	http://cr.openjdk.java.net/~arapte/8039081/webrev.03/
>
>
> Regards,
> Ambarish
> 	
> 	
>
> -----Original Message-----
> From: Prasanta Sadhukhan
> Sent: Friday, August 05, 2016 11:48 AM
> To: Ambarish Rapte; awt-dev at openjdk.java.net
> Subject: Re: <AWT Dev> Review Request for 8039081: [TEST_BUG] Test java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java fails
>
>
>
> On 8/1/2016 12:54 PM, Ambarish Rapte wrote:
>> Hi,
>>
>>         This is an older issue fix which was paused.
>>         Here is an updated webrev:
>>         http://cr.openjdk.java.net/~arapte/8039081/webrev.02/
>>
>>
>>         Issue & Fix:
>>           There were platforms wise different issues:
>>
>>           Linux:
>>             Issue:
>>               Reference to TrayIcon was not released from member fields of XTrayIconPeer like, TrayIconCanvas, XTrayIconEmbeddedFrame.
>>               PopupMenu.removeNotify() was not called for PopupMenu added to TrayIcon.
>>               This prevented from TrayIcon & PopupMenu to TrayIcon from getting garbage collected.
>>               However the behavior was not uniform: Sometimes the reference gets collected but sometimes it does not even after 100+ OOMs.
>>             Fix:
>>               Released reference to TrayIcon by setting these variables to NULL.
> Don't we need to dispose popup and tooltip before setting to NULL?
> Also, in the test there is a "," missing after copyright year.
>
> Regards
> Prasanta
>>               With this change, reference gets collected mostly with the first OOM.
>>               Removed listeners to avoid any events while the TrayIcon/Peer is getting disposed: Had observed a NPE at TrayIconEventProxy::MouseExited(), hence removeListeners() is required.
>>
>>           Mac:
>>             Issue:
>>               The test failed with OOM exception, due to incorrect way of causing OOM in the test. (Line No.85 in existing Test)
>>             Fix:
>>               Correction in Test: Corrected the OOM causing code in test.
>>
>>           Windows:
>>             Issue:
>>               The test fails to run on windows, as the popup should have a container parent.
>>             Fix:
>>               Correction in Test:
>>               The test is not required for windows.
>>               TrayIcon & PopupMenu get collected easily on windows, verified that by changes in test.
>>               Hence discarding execution of test on windows.
>>
>>
>>
>>         Verification:
>>           No other test of TrayIcon fails due to this change on Win, Mac, Linux.
>>
>>
>>
>> Regards,
>> Ambarish
>>
>>
>> -----Original Message-----
>> From: Sergey Bylokhov
>> Sent: Monday, December 07, 2015 6:03 PM
>> To: Ambarish Rapte; Semyon Sadetsky; Prasanta Sadhukhan;
>> awt-dev at openjdk.java.net
>> Subject: Re: <AWT Dev> Review Request for 8039081: [TEST_BUG] Test
>> java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java fails
>>
>> Hi, Ambarish.
>>
>> It seems this version of the test completes successfully, before related fix was integrated(JDK-8007220) but it should fail(I tested jdk8u05b13), please double check.
>>
>> On 03.12.15 11:45, Ambarish Rapte wrote:
>>> Hi Semyon,
>>>
>>>                    I had verified the patch fix with
>>>
>>> Windows      7   64-bit,
>>>
>>> Ubuntu 14.04  32 & 64 bit &
>>>
>>> Mac platform.
>>>
>>> Where the test executes & passes.
>>>
>>> Are you using Ubuntu 15.10 ?
>>>
>>> I am setting up Ubuntu 15.10  64 bit to reproduce the same failure.
>>>
>>> However, solution to this failure would require a small wait for gc
>>> to finish.
>>>
>>> Regards,
>>>
>>> Ambarish
>>>
>>> *From:*Semyon Sadetsky
>>> *Sent:* Wednesday, December 02, 2015 1:54 PM
>>> *To:* Ambarish Rapte; Prasanta Sadhukhan; awt-dev at openjdk.java.net
>>> *Subject:* Re: Review Request for 8039081: [TEST_BUG] Test
>>> java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java fails
>>>
>>> Hi Ambarish,
>>>
>>> Now it fails on Linux:
>>>
>>> ACTION: main -- Failed. Execution failed: `main' threw exception:
>>> java.lang.OutOfMemoryError: Java heap space
>>> REASON: User specified action: run main/othervm -Xmx50m PopupMenuLeakTest
>>> TIME:   1.445 seconds
>>> messages:
>>> command: main -Xmx50m PopupMenuLeakTest
>>> reason: User specified action: run main/othervm -Xmx50m
>>> PopupMenuLeakTest elapsed time (seconds): 1.445
>>> STDOUT:
>>> STDERR:
>>> java.lang.OutOfMemoryError: Java heap space
>>>        at PopupMenuLeakTest.assertCollected(PopupMenuLeakTest.java:85)
>>>        at PopupMenuLeakTest.main(PopupMenuLeakTest.java:57)
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>        at
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>        at
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>        at java.lang.reflect.Method.invoke(Method.java:520)
>>>        at
>>> com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:92)
>>>        at java.lang.Thread.run(Thread.java:747)
>>>
>>> JavaTest Message: Test threw exception: java.lang.OutOfMemoryError:
>>> Java heap space JavaTest Message: shutting down test
>>>
>>> STATUS:Failed.`main' threw exception: java.lang.OutOfMemoryError:
>>> Java heap space
>>>
>>> --Semyon
>>>
>>> On 11/30/2015 6:44 PM, Ambarish Rapte wrote:
>>>
>>>       Hi Semyon,
>>>
>>>                        I have updated the fix patch with below
>>> changes,
>>>
>>>       1.Code formatting.
>>>
>>>       2.Reduced the number of OOMs.
>>>
>>>       3.Removed un-required delays.
>>>
>>>                        Please review the update patch, which causes OOM
>>>       early than previous change.
>>>
>>>       http://cr.openjdk.java.net/~arapte/8039081/webrev.01/
>>>       <http://cr.openjdk.java.net/%7Earapte/8039081/webrev.01/>
>>>
>>>       Thanks,
>>>       Ambarish
>>>
>>>       *From:*Semyon Sadetsky
>>>       *Sent:* Monday, November 30, 2015 1:54 PM
>>>       *To:* Ambarish Rapte; Prasanta Sadhukhan; awt-dev at openjdk.java.net
>>>       <mailto:awt-dev at openjdk.java.net>
>>>       *Subject:* Re: Review Request for 8039081: [TEST_BUG] Test
>>>       java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java fails
>>>
>>>       Hi Ambarish,
>>>
>>>       On my Windows 7 64bit the test fails because of timeout.
>>>
>>>       --Semyon
>>>
>>>       On 11/20/2015 1:30 PM, Ambarish Rapte wrote:
>>>
>>>           Hi All,
>>>
>>>                            Please review the fix for JDK9,
>>>
>>>                            Bug:
>>>           https://bugs.openjdk.java.net/browse/JDK-8039081
>>>
>>>                            Webrev:
>>>           http://cr.openjdk.java.net/~arapte/8039081/webrev.00/
>>>
>>>           *Issue*:
>>>
>>>           èThe test fails on windows with below exception,
>>>
>>>           Caused by: java.lang.IllegalArgumentException: illegal popup
>>>           menu container class
>>>                    at
>>>           sun.awt.windows.WPopupMenuPeer.<init>(WPopupMenuPeer.java:65)
>>>                    at
>>>           sun.awt.windows.WToolkit.createPopupMenu(WToolkit.java:461)
>>>                    at java.awt.PopupMenu.addNotify(PopupMenu.java:124)
>>>                    at
>>>           PopupMenuLeakTest.addNotifyPopup(PopupMenuLeakTest.java:63)
>>>
>>>           èWith below exception on mac, ubuntu,
>>>
>>>           java.lang.OutOfMemoryError: Java heap space
>>>
>>>                            at
>>>           PopupMenuLeakTest.assertCollected(PopupMenuLeakTest.java:85)
>>>
>>>                            at
>>>           PopupMenuLeakTest.main(PopupMenuLeakTest.java:57)
>>>
>>>                            at
>>>           sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>
>>>                            at
>>>           
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
>>> j
>>> ava:62)
>>>
>>>                            at
>>>           
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
>>> s
>>> orImpl.java:43)
>>>
>>>                            at
>>> java.lang.reflect.Method.invoke(Method.java:520)
>>>
>>>                            at
>>>           
>>> com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.
>>> java:92)
>>>
>>>                            at java.lang.Thread.run(Thread.java:747)
>>>
>>>           *Cause*:
>>>
>>>                            This is a test code issue.
>>>
>>>                            On Windows Popup menu should have a valid
>>>           parent container.
>>>
>>>                            Is there is no parent container , then above
>>>           exception is thrown.
>>>
>>>                            And also, after throwing OOM exception, program
>>>           tried to allocate new memory in catch.
>>>
>>>                            Which results in failure again.
>>>
>>>           *Fix*:
>>>
>>>                            Updated the test code to add popup menu as a
>>>           child of Frame.
>>>
>>>                            Verifiew on : Ubuntu, Windows & Mac
>>>
>>>           Many Thanks,
>>>
>>>           Ambarish
>>>
>> --
>> Best regards, Sergey.



More information about the awt-dev mailing list