Hi Costin,
I was getting ready to ask about ContextManager getting stuck
during shutdown. This patch keeps it from getting stuck, but
if the context was in "STATE_READY", then "shutdownContext( context )"
is called which sets the state to "STATE_DISABLED" causing
removeContext() to exit early. The interceptor's removeContext()
methods won't be called.
While pondering a fix for this, I was also pondering what should
happen if an interceptor throws an exceptions during context
removal. Currently, an exception would get handled outside
of ContextManger and potentially leave a context in an inconsistent
state. Should interceptor exceptions be caught, logged, then
ignored by ContextManager so shutdown can proceed without being
aborted?
Also, it seems to me that a Tomcat shutdown will remove the contexts
out from under any requests that are currently using it. Am I
missing something? If not, should we try to add, or at least
provide for, an "orderly" shutdown in addition to the "forced"
shutdown we seem to currently have?
Cheers,
Larry
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Friday, December 01, 2000 12:43 PM
> To: [EMAIL PROTECTED]
> Subject: cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/core
> ContextManager.java
>
>
> costin 00/12/01 09:42:52
>
> Modified: src/share/org/apache/tomcat/core ContextManager.java
> Log:
> Fixed small bug that prevented normal shutdown.
>
> Revision Changes Path
> 1.152 +2 -1
> jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java
>
> Index: ContextManager.java
> ===================================================================
> RCS file:
> /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Cont
> extManager.java,v
> retrieving revision 1.151
> retrieving revision 1.152
> diff -u -r1.151 -r1.152
> --- ContextManager.java 2000/11/30 06:17:12 1.151
> +++ ContextManager.java 2000/12/01 17:42:51 1.152
> @@ -494,6 +494,8 @@
> if( context.getState() == Context.STATE_READY )
> shutdownContext( context );
>
> + contextsV.removeElement(context);
> +
> if( context.getState() == Context.STATE_DISABLED )
> return;
>
> @@ -505,7 +507,6 @@
> cI[i].removeContext( this, context );
> }
>
> - contextsV.removeElement(context);
> }
>
>
>
>
>
>