Author: markt
Date: Tue Jul 26 08:25:46 2011
New Revision: 1151016

URL: http://svn.apache.org/viewvc?rev=1151016&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51555
Permit an additional lifecycle transition. Allow destroy() to be called on 
components that are initialized. This can occur in some start failure scenarios.

Modified:
    tomcat/trunk/java/org/apache/catalina/Lifecycle.java
    tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/Lifecycle.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Lifecycle.java?rev=1151016&r1=1151015&r2=1151016&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Lifecycle.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Lifecycle.java Tue Jul 26 08:25:46 
2011
@@ -14,8 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-
 package org.apache.catalina;
 
 
@@ -28,35 +26,38 @@ package org.apache.catalina;
  * The valid state transitions for components that support {@link Lifecycle}
  * are:
  * <pre>
- *    init()
- * NEW ->-- INITIALIZING
- * |||           |                  
--------------------<-----------------------
- * |||           |auto              |                                          
|
- * |||          \|/    start()     \|/       auto          auto         stop() 
|
- * |||      INITIALIZED -->-- STARTING_PREP -->- STARTING -->- STARTED -->---  
|
- * |||                              ^                             |         |  
|
- * |||        start()               |                             |         |  
|
- * ||----------->--------------------                             |         |  
|
- * ||                                                             |         |  
|
- * |---                auto                    auto               |         |  
|
- * |  |          ---------<----- MUST_STOP ---------------------<--         |  
|
- * |  |          |                                                          |  
|
- * |  |          ---------------------------<--------------------------------  
^
- * |  |          |                                                             
|
- * |  |         \|/            auto                 auto              start()  
|
- * |  |     STOPPING_PREP ------>----- STOPPING ------>----- STOPPED 
---->------
- * |  |                                   ^                  |  |  ^
- * |  |                  stop()           |                  |  |  |
- * |  |          --------------------------                  |  |  |
- * |  |          |                                  auto     |  |  |
- * |  |          |                  MUST_DESTROY------<-------  |  |
- * |  |          |                    |                         |  |
- * |  |          |                    |auto                     |  |
- * |  |          |    destroy()      \|/              destroy() |  |
- * |  |       FAILED ---->------ DESTROYING ---<-----------------  |
- * |  |                           ^     |                          |
- * |  |        destroy()          |     |auto                      |
- * |  -----------------------------    \|/                         |
+ *            start()
+ *  -----------------------------
+ *  |                           |
+ *  | init()                    |
+ * NEW ->-- INITIALIZING        |
+ * | |           |              |     
------------------<-----------------------
+ * | |           |auto          |     |                                        
|
+ * | |          \|/    start() \|/   \|/     auto          auto         stop() 
|
+ * | |      INITIALIZED -->-- STARTING_PREP -->- STARTING -->- STARTED -->---  
|
+ * | |         |                                                  |         |  
|
+ * | |         |                                                  |         |  
|
+ * | |         |                                                  |         |  
|
+ * | |destroy()|                                                  |         |  
|
+ * | -->-----<--       auto                    auto               |         |  
|
+ * |     |       ---------<----- MUST_STOP ---------------------<--         |  
|
+ * |     |       |                                                          |  
|
+ * |    \|/      ---------------------------<--------------------------------  
^
+ * |     |       |                                                             
|
+ * |     |      \|/            auto                 auto              start()  
|
+ * |     |  STOPPING_PREP ------>----- STOPPING ------>----- STOPPED 
---->------
+ * |     |                                ^                  |  |  ^
+ * |     |               stop()           |                  |  |  |
+ * |     |       --------------------------                  |  |  |
+ * |     |       |                                  auto     |  |  |
+ * |     |       |                  MUST_DESTROY------<-------  |  |
+ * |     |       |                    |                         |  |
+ * |     |       |                    |auto                     |  |
+ * |     |       |    destroy()      \|/              destroy() |  |
+ * |     |    FAILED ---->------ DESTROYING ---<-----------------  |
+ * |     |                        ^     |                          |
+ * |     |     destroy()          |     |auto                      |
+ * |     -------->-----------------    \|/                         |
  * |                                 DESTROYED                     |
  * |                                                               |
  * |                            stop()                             |
@@ -93,7 +94,8 @@ package org.apache.catalina;
  * methods that trigger the changed. No {@link LifecycleEvent}s are fired if 
the
  * attempted transition is not valid.
  * 
- * TODO: Not all components may transition from STOPPED to STARTING_PREP
+ * TODO: Not all components may transition from STOPPED to STARTING_PREP. These
+ *       components should use MUST_DESTROY to signal this.
  *
  * @author Craig R. McClanahan
  * @version $Id$

Modified: tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java?rev=1151016&r1=1151015&r2=1151016&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java Tue Jul 26 
08:25:46 2011
@@ -274,7 +274,8 @@ public abstract class LifecycleBase impl
         
         if (!state.equals(LifecycleState.STOPPED) &&
                 !state.equals(LifecycleState.FAILED) &&
-                !state.equals(LifecycleState.NEW)) {
+                !state.equals(LifecycleState.NEW) &&
+                !state.equals(LifecycleState.INITIALIZED)) {
             invalidTransition(Lifecycle.BEFORE_DESTROY_EVENT);
         }
 

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1151016&r1=1151015&r2=1151016&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Jul 26 08:25:46 2011
@@ -86,6 +86,10 @@
         Authenticators, now return a 500 response rather than a 200 response.
         (markt)
       </fix>
+      <fix>
+        <bug>51555</bug>: Allow destroy() to be called on Lifecycle components
+        that are in the initialized state. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to