You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by al...@locus.apache.org on 2000/07/11 05:13:36 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/service PoolTcpEndpoint.java
alex 00/07/10 20:13:36
Modified: src/share/org/apache/tomcat/service PoolTcpEndpoint.java
Log:
Clean up logging, remove printStackTrace and System.out.println
Clarified use of "running" parameter, and startup/shutdown procedure
(trying to track down "unexpected shutdown after 12 hours or so" bug)
Question: is "isPool" relevant anymore?
Revision Changes Path
1.9 +58 -68 jakarta-tomcat/src/share/org/apache/tomcat/service/PoolTcpEndpoint.java
Index: PoolTcpEndpoint.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/service/PoolTcpEndpoint.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- PoolTcpEndpoint.java 2000/06/22 23:24:15 1.8
+++ PoolTcpEndpoint.java 2000/07/11 03:13:35 1.9
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/service/PoolTcpEndpoint.java,v 1.8 2000/06/22 23:24:15 alex Exp $
- * $Revision: 1.8 $
- * $Date: 2000/06/22 23:24:15 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/service/PoolTcpEndpoint.java,v 1.9 2000/07/11 03:13:35 alex Exp $
+ * $Revision: 1.9 $
+ * $Date: 2000/07/11 03:13:35 $
*
* ====================================================================
*
@@ -93,7 +93,7 @@
* @author Costin@eng.sun.com
* @author Gal Shachor [shachor@il.ibm.com]
*/
-public class PoolTcpEndpoint { // implements Endpoint {
+public class PoolTcpEndpoint extends Logger.Helper { // implements Endpoint {
private StringManager sm = StringManager.getManager("org.apache.tomcat.service");
@@ -107,8 +107,6 @@
TcpConnectionHandler handler;
- private LogHelper loghelper = new LogHelper("tc_log", "PoolTcpEndpoint");
-
private InetAddress inet;
private int port;
@@ -116,22 +114,15 @@
private ServerSocket serverSocket;
ThreadPoolRunnable listener;
- boolean running = true;
+ private boolean running = false;
static final int debug=0;
ThreadPool tp;
public PoolTcpEndpoint() {
+ super("tc_log"); // initialize default logger
tp = new ThreadPool();
}
-
- private void log( String msg ) {
- loghelper.log(msg);
- }
-
- private void log(String msg, Throwable t, int level) {
- loghelper.log(msg, t, level);
- }
// -------------------- Configuration --------------------
@@ -199,6 +190,10 @@
return handler;
}
+ public boolean isRunning() {
+ return running;
+ }
+
/**
* Allows the server developer to specify the backlog that
* should be used for server sockets. By default, this value
@@ -227,33 +222,27 @@
// -------------------- Public methods --------------------
public void startEndpoint() throws IOException, InstantiationException {
- try {
- if(factory==null)
- factory=ServerSocketFactory.getDefault();
- if(serverSocket==null) {
- if (inet == null) {
- serverSocket = factory.createSocket(port, backlog);
- } else {
- serverSocket = factory.createSocket(port, backlog, inet);
- }
- }
- if(isPool) {
- tp.start();
+ try {
+ if(factory==null)
+ factory=ServerSocketFactory.getDefault();
+ if(serverSocket==null) {
+ if (inet == null) {
+ serverSocket = factory.createSocket(port, backlog);
+ } else {
+ serverSocket = factory.createSocket(port, backlog, inet);
}
- } catch( IOException ex ) {
- // throw?
- // ex.printStackTrace();
- running=false;
+ }
+ } catch( IOException ex ) {
+ log("couldn't start endpoint", ex);
throw ex;
- // throw new HttpServerException(msg);
- } catch( InstantiationException ex1 ) {
- // throw?
- // ex1.printStackTrace();
- running=false;
+ } catch( InstantiationException ex1 ) {
+ log("couldn't start endpoint", ex1);
throw ex1;
- // throw new HttpServerException(msg);
- }
- running=true;
+ }
+ if(isPool) {
+ tp.start();
+ }
+ running = true;
if(isPool) {
listener = new TcpWorkerThread(this);
tp.runIt(listener);
@@ -263,13 +252,17 @@
}
public void stopEndpoint() {
- tp.shutdown();
- running=false;
- try {
- serverSocket.close(); // XXX?
- } catch(Exception e) {
+ log("Stopping endpoint");
+ if (running) {
+ log("Stack trace that called stopEndpoint():", new Throwable("trace"), Logger.DEBUG);
+ tp.shutdown();
+ running = false;
+ try {
+ serverSocket.close(); // XXX?
+ } catch(Exception e) {
+ }
+ serverSocket = null;
}
- serverSocket = null;
}
// -------------------- Private methods
@@ -277,29 +270,26 @@
Socket acceptSocket() {
Socket accepted = null;
try {
- if(running == true) {
- if(null!= serverSocket) {
- accepted = serverSocket.accept();
- if(running == false) {
- if(null != accepted) {
- accepted.close(); // rude, but unlikely!
- accepted = null;
- }
- }
- if( factory != null && accepted != null)
- factory.initSocket( accepted );
+ if (running) {
+ if(null!= serverSocket) {
+ accepted = serverSocket.accept();
+ if(running == false) {
+ if(null != accepted) {
+ accepted.close(); // rude, but unlikely!
+ accepted = null;
+ }
+ }
+ if( factory != null && accepted != null)
+ factory.initSocket( accepted );
}
- }
-
- } catch(InterruptedIOException iioe) {
+ }
+ }
+ catch(InterruptedIOException iioe) {
// normal part -- should happen regularly so
// that the endpoint can release if the server
// is shutdown.
- // you know, i really wish that there was a
- // way for the socket to timeout without
- // tripping an exception. Exceptions are so
- // 'spensive.
- } catch (SocketException e) {
+ }
+ catch (SocketException e) {
// TCP stacks can throw SocketExceptions when the client
// disconnects. We don't want this to shut down the
@@ -307,8 +297,8 @@
// solution? Should we compare the message string to
// "Connection reset by peer"?
- // socket exceptions just after closing endpoint aren't
- // even logged
+ // socket exceptions just after closing endpoint (when
+ // running=false) aren't even logged
if (running != false) {
String msg = sm.getString("endpoint.err.nonfatal",
serverSocket, e);
@@ -321,10 +311,10 @@
// exceptions, catch them here and log as above
catch(Throwable e) {
- running = false;
String msg = sm.getString("endpoint.err.fatal",
serverSocket, e);
log(msg, e, Logger.ERROR);
+ stopEndpoint(); // safe to call this from inside thread pool?
}
return accepted;
@@ -385,7 +375,7 @@
}
// Create per-thread cache
- while(endpoint.running) {
+ while(endpoint.isRunning()) {
Socket s = endpoint.acceptSocket();
if(null != s) {
// Continue accepting on another thread...