Charles Oliver Nutter created JRUBY-6523:
--------------------------------------------

             Summary: Static ThreadLocals must be weak or soft or not static
                 Key: JRUBY-6523
                 URL: https://jira.codehaus.org/browse/JRUBY-6523
             Project: JRuby
          Issue Type: Bug
          Components: Core Classes/Modules
    Affects Versions: JRuby 1.6.7, JRuby 1.7
            Reporter: Charles Oliver Nutter
             Fix For: JRuby 1.6.8, JRuby 1.7


While fixing JRUBY-6522, I found that there are a few additional places where 
we have static ThreadLocals that can cause ClassLoader leaks in environments 
where a pool of threads may encounter multiple JRuby runtimes, such as when 
applications are redeployed to a webapp server.

I audited for static threadlocals, and found the following:

org.jruby.ext.ffi.AutoPointer:25

{noformat}
private static final ThreadLocal<ReaperGroup> currentReaper = new 
ThreadLocal<ReaperGroup>();
{noformat}

org.jruby.ext.ffi.jffi.AllocatedNativeMemoryIO:14

{noformat}
private static final ThreadLocal<AllocationGroup> currentBucket = new 
ThreadLocal<AllocationGroup>();
{noformat}

org.jruby.ext.ffi.jffi.TransientNativeMemoryIO:43

{noformat}
private static final ThreadLocal<Magazine> currentMagazine = new 
ThreadLocal<Magazine>();
{noformat}

org.jruby.interpreter.IRBreakJump:13

{noformat}
   private static ThreadLocal<IRBreakJump> threadLocalBJ = new 
ThreadLocal<IRBreakJump>() {
       public IRBreakJump initialValue() { return new IRBreakJump(); }
    };
{noformat}

org.jruby.interpreter.IRReturnJump:11

{noformat}
    private static ThreadLocal<IRReturnJump> threadLocalRJ = new 
ThreadLocal<IRReturnJump>() {
       public IRReturnJump initialValue() { return new IRReturnJump(); }
    };
{noformat}

There's also this in org.jruby.Ruby, but I'm not sure if it's a risk; it's 
explicitly used for thread-local stuff, but via an API we don't publish or 
recommend. Perhaps it should be removed?

{noformat}
private static ThreadLocal<Ruby> threadLocalRuntime = new ThreadLocal<Ruby>();
{noformat}

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

        

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to