https://issues.apache.org/bugzilla/show_bug.cgi?id=50107

           Summary: StandardPipeline is destroyed two times.
           Product: Tomcat 7
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: minor
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: mashm...@gmail.com


Created an attachment (id=26181)
 --> (https://issues.apache.org/bugzilla/attachment.cgi?id=26181)
patch for MBeanFactory.java

When I call MBeanFactory#removeHost operation via JMX(jconsle), I get the
following message.

INFO: The destroy() method was called on component
[Pipeline[StandardHost[localhost]]] after destroy() had already been called.
The second call will be ignored.

StandardPipeline is destroyed two times.
At first, pipeline is destroyed at ContainerBase.java L.1096:
<<ContainerBase.java destroyInternal() L.1094-1097>>
   1094         // Stop the Valves in our pipeline (including the basic), if
any
   1095         if (pipeline instanceof Lifecycle) {
   1096             ((Lifecycle) pipeline).destroy();
   1097         }

<<ContainerBase.java destroyInternal() L.1104-1107>>
   1104         // Required if the child is destroyed directly.
   1105         if (parent != null) {
   1106             parent.removeChild(this);
   1107         }
When above-mentioned "parent" is StandardEngine, the parent.removeChild() calls
the  LifecycleBase#child.destroy(), and child.destroy() calls
ContainerBase#destroyInternal().
At this time ContainerBase is StandardHost.
<<ContainerBase.java removeChild() L.960-964>>
    960         // Set child's parent to null to prevent a loop
    961         child.setParent(null);
    962         try {
    963             child.destroy();
    964         } catch (LifecycleException e) {

As a result, pipeline is destroyed again(, and get the above-mentioned info
message).

In Tomcat 6.0, child.destroy() is not called from ContainerBase#removeChild().
But, as seen above, the removeChild() that is contained in Tomcat7.0 calls the
child.destroy().
IMHO, it might not be better to call the child.destroy() from removeHost().

I made the patch that removed host.destroy() from removeHost(). 

Best regards.

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

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

Reply via email to