[ 
https://issues.apache.org/jira/browse/SHIRO-159?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12867395#action_12867395
 ] 

Les Hazlewood edited comment on SHIRO-159 at 5/14/10 1:19 AM:
--------------------------------------------------------------

I'm not sure of what to do about the getSubject() call - all the other areas in 
the framework are covered from a responsibility perspective I think:

- The AbstractShiroFilter binds and unbinds for an incoming request
- The Spring RemoteInvocationExecutor binds and unbinds for an incoming remote 
method invocation
- The Executor/ExecutorService/ScheduledExecutorService implementations 
bind/unbind for async/'other thread' execution.
- Subject.associateWith* guarantees cleanup
- Subject.execute* guarantees cleanup

The getSubject() auto-creation is the only area where we can't guarantee 
cleanup.  But the idea is if you call that method in the course of execution 
with any of the above 5 mechanisms, then everything should be ok.  I don't know 
of any other way to guarantee cleanup.  Even a ContextListener probably 
wouldn't do the job - you'd only be able to clear the thread that calls the 
listener - not any of the other threads that are in the request thread pool.

      was (Author: lhazlewood):
    I'm not sure of what to do about the getSubject() call - all the other 
areas in the framework are covered from a responsibility perspective I think:

- The AbstractShiroFilter binds and unbinds for an incoming request
- The Spring RemoteInvocationExecutor binds and unbinds for an incoming remote 
method invocation
- The Executor/ExecutorService/ScheduledExecutorService implementations 
bind/unbind for async/'other thread' execution.

The getSubject() auto-creation is the only area where we can't guarantee 
cleanup.  But the idea is if you call that method in the course of execution 
with any of the above 3 methods, then everything should be ok.  I don't know of 
any other way to guarantee cleanup.  Even a ContextListener probably wouldn't 
do the job - you'd only be able to clear the thread that calls the listener - 
not any of the other threads that are in the request thread pool.
  
> ThreadLocal is not cleared upon the unloading of the webapp and the SHiro 
> Servlet
> ---------------------------------------------------------------------------------
>
>                 Key: SHIRO-159
>                 URL: https://issues.apache.org/jira/browse/SHIRO-159
>             Project: Shiro
>          Issue Type: Bug
>          Components: Integration: JEE
>    Affects Versions: 1.0.0
>         Environment:  Model Name:     MacBook Pro
>   Model Identifier:   MacBookPro5,1
>   Processor Name:     Intel Core 2 Duo
>   Processor Speed:    2.8 GHz
>   Number Of Processors:       1
>   Total Number Of Cores:      2
>   L2 Cache:   6 MB
>   Memory:     4 GB
>   Bus Speed:  1.07 GHz
>  System Version:      Mac OS X 10.6.3 (10D573)
>   Kernel Version:     Darwin 10.3.0
>  
>            Reporter: david e. berry
>             Fix For: 1.0.0
>
>
> Tomcat 6.0.26 reports a severe error when unloading a web app that uses 
> org.apache.shiro.web.servlet.IniShiroFilter
> SEVERE: A web application created a ThreadLocal with key of type [null] 
> (value [org.apache.shiro.util.threadcontex...@c0c66a]) and a value of type 
> [java.util.HashMap] (value [{}]) but failed to remove it when the web 
> application was stopped. To prevent a memory leak, the ThreadLocal has been 
> forcibly removed.
> May 13, 2010 9:29:51 PM org.apache.catalina.loader.WebappClassLoader 
> clearThreadLocalMap

-- 
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