Author: markt
Date: Wed Sep 22 14:56:26 2010
New Revision: 1000014

URL: http://svn.apache.org/viewvc?rev=1000014&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49030
Failure of one connector should not leave some connectors started and some 
ignored

Modified:
    tomcat/tc6.0.x/trunk/STATUS.txt
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/MapperListener.java
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardService.java
    tomcat/tc6.0.x/trunk/java/org/apache/jk/common/ChannelSocket.java
    tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml

Modified: tomcat/tc6.0.x/trunk/STATUS.txt
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=1000014&r1=1000013&r2=1000014&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/STATUS.txt (original)
+++ tomcat/tc6.0.x/trunk/STATUS.txt Wed Sep 22 14:56:26 2010
@@ -66,13 +66,6 @@ PATCHES PROPOSED TO BACKPORT:
              system property, but defaults to the old behaviour.
 
 
-* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49030
-  Failure of one connector should not leave some connectors started and some
-  ignored
-  https://issues.apache.org/bugzilla/attachment.cgi?id=25633
-  +1: kkolinko, markt, mturk
-  -1:
-
 * Configure Tomcat to use HttpOnly for session cookies by default
   
http://people.apache.org/~kkolinko/patches/2010-04-21_tc6_context_httpOnly.patch
   +1: kkolinko

Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java?rev=1000014&r1=1000013&r2=1000014&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java Wed 
Sep 22 14:56:26 2010
@@ -18,7 +18,6 @@
 
 package org.apache.catalina.connector;
 
-import java.net.URLEncoder;
 import java.util.HashMap;
 
 import javax.management.MBeanRegistration;
@@ -1259,4 +1258,18 @@ public class Connector
         getService().removeConnector(this);
     }
 
+    /**
+     * Provide a useful toString() implementation as it may be used when 
logging
+     * Lifecycle errors to identify the component.
+     */
+    @Override
+    public String toString() {
+        // Not worth caching this right now
+        StringBuilder sb = new StringBuilder("Connector[");
+        sb.append(getProtocol());
+        sb.append('-');
+        sb.append(getPort());
+        sb.append(']');
+        return sb.toString();
+    }
 }

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/MapperListener.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/MapperListener.java?rev=1000014&r1=1000013&r2=1000014&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/MapperListener.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/MapperListener.java 
Wed Sep 22 14:56:26 2010
@@ -169,8 +169,10 @@ public class MapperListener
      * unregister this from JMImplementation:type=MBeanServerDelegate
      */
     public void destroy() {
+        if (mBeanServer == null) {
+            return;
+        }
         try {
-
             ObjectName objectName = new ObjectName(
                     "JMImplementation:type=MBeanServerDelegate");
             mBeanServer.removeNotificationListener(objectName, this);

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties?rev=1000014&r1=1000013&r2=1000014&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties 
Wed Sep 22 14:56:26 2010
@@ -179,6 +179,10 @@ standardServer.initialize.initialized=Th
 standardServer.start.connectors=At least one connector is not associated with 
any container
 standardServer.start.started=This server has already been started
 standardServer.stop.notStarted=This server has not yet been started
+standardService.connector.initFailed=Failed to initialize connector [{0}]
+standardService.connector.pauseFailed=Failed to pause connector [{0}]
+standardService.connector.startFailed=Failed to start connector [{0}]
+standardService.connector.stopFailed=Failed to stop connector [{0}]
 standardService.initialize.initialized=This service has already been 
initialized
 standardService.initialize.failed=Service initializing at {0} failed
 standardService.register.failed=Error registering Service at domain {0}

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardService.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardService.java?rev=1000014&r1=1000013&r2=1000014&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardService.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardService.java Wed 
Sep 22 14:56:26 2010
@@ -266,7 +266,9 @@ public class StandardService
                 try {
                     connector.initialize();
                 } catch (LifecycleException e) {
-                    log.error("Connector.initialize", e);
+                    log.error(sm.getString(
+                            "standardService.connector.initFailed",
+                            connector), e);
                 }
             }
 
@@ -274,7 +276,9 @@ public class StandardService
                 try {
                     ((Lifecycle) connector).start();
                 } catch (LifecycleException e) {
-                    log.error("Connector.start", e);
+                    log.error(sm.getString(
+                            "standardService.connector.startFailed",
+                            connector), e);
                 }
             }
 
@@ -338,7 +342,9 @@ public class StandardService
                 try {
                     ((Lifecycle) connectors[j]).stop();
                 } catch (LifecycleException e) {
-                    log.error("Connector.stop", e);
+                    log.error(sm.getString(
+                            "standardService.connector.stopFailed",
+                            connectors[j]), e);
                 }
             }
             connectors[j].setContainer(null);
@@ -530,8 +536,13 @@ public class StandardService
         // Start our defined Connectors second
         synchronized (connectors) {
             for (int i = 0; i < connectors.length; i++) {
-                if (connectors[i] instanceof Lifecycle)
+                try {
                     ((Lifecycle) connectors[i]).start();
+                } catch (Exception e) {
+                    log.error(sm.getString(
+                            "standardService.connector.startFailed",
+                            connectors[i]), e);
+                }
             }
         }
         
@@ -563,7 +574,13 @@ public class StandardService
         // Stop our defined Connectors first
         synchronized (connectors) {
             for (int i = 0; i < connectors.length; i++) {
-                connectors[i].pause();
+                try {
+                    connectors[i].pause();
+                } catch (Exception e) {
+                    log.error(sm.getString(
+                            "standardService.connector.pauseFailed",
+                            connectors[i]), e);
+                }
             }
         }
 
@@ -592,8 +609,13 @@ public class StandardService
         // Stop our defined Connectors first
         synchronized (connectors) {
             for (int i = 0; i < connectors.length; i++) {
-                if (connectors[i] instanceof Lifecycle)
+                try {
                     ((Lifecycle) connectors[i]).stop();
+                } catch (Exception e) {
+                    log.error(sm.getString(
+                            "standardService.connector.stopFailed",
+                            connectors[i]), e);
+                }
             }
         }
 
@@ -676,9 +698,19 @@ public class StandardService
 
         // Initialize our defined Connectors
         synchronized (connectors) {
-                for (int i = 0; i < connectors.length; i++) {
+            for (int i = 0; i < connectors.length; i++) {
+                try {
                     connectors[i].initialize();
+                } catch (Exception e) {
+                    String message = sm.getString(
+                            "standardService.connector.initFailed",
+                            connectors[i]);
+                    log.error(message, e);
+
+                    if 
(Boolean.getBoolean("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE"))
+                        throw new LifecycleException(message);
                 }
+            }
         }
     }
     

Modified: tomcat/tc6.0.x/trunk/java/org/apache/jk/common/ChannelSocket.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jk/common/ChannelSocket.java?rev=1000014&r1=1000013&r2=1000014&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jk/common/ChannelSocket.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jk/common/ChannelSocket.java Wed Sep 
22 14:56:26 2010
@@ -509,7 +509,9 @@ public class ChannelSocket extends JkHan
                unLockSocket();
            }
 
-            sSocket.close(); // XXX?
+            if (sSocket != null) {
+                sSocket.close(); // XXX?
+            }
             
             if( tpOName != null )  {
                 Registry.getRegistry(null, null).unregisterComponent(tpOName);

Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1000014&r1=1000013&r2=1000014&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Wed Sep 22 14:56:26 2010
@@ -65,6 +65,10 @@
         cause, CVE-2010-1622. (markt)
       </fix>
       <fix>
+        <bug>49030</bug>: Failure during start of one connector should not 
leave
+        some connectors started and some ignored. (kkolinko)
+      </fix>
+      <fix>
         <bug>49613</bug>: Improve performance when using SSL for applications
         that make multiple class to <code>Request.getAttributeNames()</code>.
         Patch provided by Sampo Savolainen. (markt)



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

Reply via email to