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

Ambarish Rapte ambarish.rapte at oracle.com
Fri Aug 5 07:09:47 UTC 2016


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.

	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