[ 
https://issues.apache.org/jira/browse/FELIX-728?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Felix Meschberger updated FELIX-728:
------------------------------------

    Fix Version/s: felix-1.2.2

I assume this will go into the felix-1.2.2 release. Thanks.

> Garbage Collection Corner Cases in PackageAdminImpl and StartLevelImpl
> ----------------------------------------------------------------------
>
>                 Key: FELIX-728
>                 URL: https://issues.apache.org/jira/browse/FELIX-728
>             Project: Felix
>          Issue Type: Improvement
>          Components: Framework
>    Affects Versions: felix-1.0.4, felix-1.2.0
>            Reporter: Felix Meschberger
>            Assignee: Richard S. Hall
>             Fix For: felix-1.2.2
>
>         Attachments: FELIX-728.patch
>
>
> While tracking down memory issues in our OSGi based application, I stumbled 
> upon two corner case issues in the StartLevelImpl and PackageAdminImpl 
> classes, which both implement the Thread.run() method to execute their 
> operations asynchronously. Each of these run methods have a local variable 
> which is not reset after executing the operation:
> StartLevelImpl.run() has an "Object request". This is set to the start level 
> request. For example to set the start level of a bundle, the request object 
> is an array of two elements containing the bundle whose start level is to be 
> set and the actual startlevel. After setting the start level the 
> StartLevelImpl.run method keeps a string reference to the request object, 
> most notably the Bundle. If now a bundle is installed, its startlevel is set 
> and then the bundle is uninstalled, the actual bundle as well as its class 
> loader and classes will only be unloaded when a new request is sent to the 
> StartLevelImpl class. To fix this situation, I propose to move the definition 
> of the request variable inside the loop. This way, the variable is dropped 
> together with any string references.
> Similarly the PackageAdminImpl.run() method has a "Bundle[] bundles" 
> variable, which is also not reset. The fix is the same as for the 
> StartLevelImpl.run() method, in that the variable declaration is moved inside 
> the loop.
> While I did not stumble upon the PackageAdminImpl issue, I encountered the 
> StartLevelImpl one.
> Will attach a patch for review.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to