[ 
https://issues.apache.org/jira/browse/PIVOT-861?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13576764#comment-13576764
 ] 

Sandro Martini commented on PIVOT-861:
--------------------------------------

Workaround number 2 (simpler and better than number 1):
leave resourceCache enabled (without change it, and without add a disable 
flag), and instead add a clearImageListeners() method in Image, and call it 
after get an Image instance from resourceCache, for example in the 
ButtonData.java, so we could have something like this:

    public void setIcon(URL iconURL) {
        if (iconURL == null) {
            throw new IllegalArgumentException("iconURL is null.");
        }

        Image iconLocal = 
(Image)ApplicationContext.getResourceCache().get(iconURL);
        if (iconLocal == null) {
            try {
                iconLocal = Image.load(iconURL);
// TODO: move here ...
                ApplicationContext.getResourceCache().put(iconURL, iconLocal);
            } catch (TaskExecutionException exception) {
                throw new IllegalArgumentException(exception);
            }

        } else {  // TODO: new ...
                iconLocal.clearImageListeners();
        }
        setIcon(iconLocal);
    }

In this way I get the same final result as workaround number 1, but to me this 
seems a little better.
Then probably this could be applied even to all other similar classes ...

Comments ?

                
> Memory leak: Window icon ImageListenerList retains reference to closed 
> windows, preventing garbage collection
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: PIVOT-861
>                 URL: https://issues.apache.org/jira/browse/PIVOT-861
>             Project: Pivot
>          Issue Type: Bug
>          Components: wtk, wtk-media
>    Affects Versions: 2.0.2
>         Environment: Windows XP, Java 1.7.0_05
>            Reporter: David Keen
>            Assignee: Sandro Martini
>             Fix For: 2.0.3
>
>         Attachments: leaktest.zip, Pivot861.launch, PivotSample.zip
>
>
> When a window or dialog is opened which has an icon, after it is closed it 
> cannot be garbage collected because a reference is retained to it through the 
> icon.  Removing the icon resolves the issue.
> As far as I've investigated, the issue appears to the in the 
> ImageListenerList which each Image contains.  I've done a heapdump of my 
> application and used the IBM HeapAnalyzer which shows this list containing a 
> reference to the window/dialog through the ImageViewSkin, but I don't know 
> the Pivot internals well enough to see where or how it should be released.
> I'll attach a simple test application to show the issue.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to