psmith 2003/06/19 21:52:21 Modified: src/java/org/apache/log4j/net MulticastReceiver.java XMLSocketReceiver.java SocketReceiver.java Log: removed the isActive property from these classes as they will now inherit them from PluginSkeleton. Revision Changes Path 1.12 +1 -7 jakarta-log4j-sandbox/src/java/org/apache/log4j/net/MulticastReceiver.java Index: MulticastReceiver.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/net/MulticastReceiver.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- MulticastReceiver.java 19 Jun 2003 22:55:34 -0000 1.11 +++ MulticastReceiver.java 20 Jun 2003 04:52:21 -0000 1.12 @@ -116,14 +116,8 @@ } /** - Returns true if this receiver is active. */ - public synchronized boolean isActive() { - return isActive; - } - - /** Sets the flag to indicate if receiver is active or not. */ - protected synchronized void setActive(boolean isActive) { + public synchronized void setActive(boolean isActive) { this.isActive = isActive; } 1.4 +0 -6 jakarta-log4j-sandbox/src/java/org/apache/log4j/net/XMLSocketReceiver.java Index: XMLSocketReceiver.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/net/XMLSocketReceiver.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- XMLSocketReceiver.java 19 Jun 2003 22:55:34 -0000 1.3 +++ XMLSocketReceiver.java 20 Jun 2003 04:52:21 -0000 1.4 @@ -137,12 +137,6 @@ } /** - Sets the flag to indicate if receiver is active or not. */ - protected synchronized void setActive(boolean _active) { - active = _active; - } - - /** Starts the SocketReceiver with the current options. */ public void activateOptions() { if (!isActive()) { 1.9 +98 -33 jakarta-log4j-sandbox/src/java/org/apache/log4j/net/SocketReceiver.java Index: SocketReceiver.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/net/SocketReceiver.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- SocketReceiver.java 18 Jun 2003 04:02:20 -0000 1.8 +++ SocketReceiver.java 20 Jun 2003 04:52:21 -0000 1.9 @@ -53,6 +53,8 @@ import org.apache.log4j.plugins.Receiver; import org.apache.log4j.spi.LoggerRepository; +import java.io.IOException; + import java.net.ServerSocket; import java.net.Socket; @@ -77,8 +79,9 @@ @since 1.3 */ public class SocketReceiver extends Receiver implements Runnable, PortBased { + private boolean shutdown; + private Thread rThread; protected int port; - protected boolean active = false; private ServerSocket serverSocket; private Vector socketList = new Vector(); private SocketNodeEventListener listener = null; @@ -128,35 +131,60 @@ } /** - Returns true if this receiver is active. */ - public synchronized boolean isActive() { - return active; - } - - /** - Sets the flag to indicate if receiver is active or not. */ - public synchronized void setActive(boolean _active) { - active = _active; - } - - /** Starts the SocketReceiver with the current options. */ public void activateOptions() { if (!isActive()) { - Thread rThread = new Thread(this); + // shutdown(); + rThread = new Thread(this); rThread.setDaemon(true); rThread.start(); + setActive(true); + setShutdown(false); } } /** - Called when the receiver should be stopped. Closes the - server socket and all of the open sockets. */ + * Called when the receiver should be stopped. Closes the + * server socket and all of the open sockets. + */ public synchronized void shutdown() { + LogLog.debug(getName() + " received shutdown request"); + // mark this as no longer running - active = false; + setActive(false); + + if (rThread != null) { + rThread.interrupt(); + rThread = null; + } + + doShutdown(); + } + + /** + * Does the actual shutting down by closing the server socket + * and any connected sockets that have been created. + */ + private void doShutdown() { + setActive(false); + + LogLog.debug(getName() + " doShutdown called"); // close the server socket + closeServerSocket(); + + // close all of the accepted sockets + closeAllAcceptedSockets(); + + setShutdown(true); + } + + /** + * Closes the server socket, if created. + */ + private void closeServerSocket() { + LogLog.debug(getName() + " closing server socket"); + try { if (serverSocket != null) { serverSocket.close(); @@ -165,7 +193,13 @@ // ignore for now } - // close all of the accepted sockets + serverSocket = null; + } + + /** + * Closes all the connected sockets in the List. + */ + private void closeAllAcceptedSockets() { for (int x = 0; x < socketList.size(); x++) { try { ((Socket) socketList.get(x)).close(); @@ -175,14 +209,17 @@ } // clear member variables - serverSocket = null; socketList.clear(); } /** Loop, accepting new socket connections. */ public void run() { - setActive(true); + /** + * Ensure we start fresh. + */ + closeServerSocket(); + closeAllAcceptedSockets(); // start the server socket try { @@ -192,26 +229,33 @@ "error starting SocketReceiver (" + this.getName() + "), receiver did not start", e); setActive(false); + setShutdown(true); return; } + Socket socket = null; + try { - Socket socket = null; - LogLog.debug("in run-about to enter while isactiveloop"); + LogLog.debug("in run-about to enter while not interrupted loop"); - while (isActive()) { + setActive(true); + + while (!rThread.isInterrupted()) { // if we have a socket, start watching it if (socket != null) { LogLog.debug("socket not null - creating and starting socketnode"); socketList.add(socket); SocketNode node = new SocketNode(socket, this); - SocketNodeEventListener[] listeners = (SocketNodeEventListener[])listenerList.getListeners(SocketNodeEventListener.class); + SocketNodeEventListener[] listeners = + (SocketNodeEventListener[]) listenerList.getListeners( + SocketNodeEventListener.class); + for (int i = 0; i < listeners.length; i++) { - node.addSocketNodeEventListener(listeners[i]); + node.addSocketNodeEventListener(listeners[i]); } - + new Thread(node).start(); socket = null; } @@ -222,19 +266,25 @@ socket = serverSocket.accept(); LogLog.debug("accepted socket"); } - - // socket not watched because we a no longer running - // so close it now. - if (socket != null) { - socket.close(); - } } catch (Exception e) { LogLog.warn( "exception while watching socket server in SocketReceiver (" + this.getName() + "), stopping", e); } - setActive(false); + LogLog.debug(getName() + " has exited the not interrupted loop"); + + // socket not watched because we a no longer running + // so close it now. + if (socket != null) { + try { + socket.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + LogLog.debug(getName() + " is exiting main run loop"); } /** @@ -300,6 +350,21 @@ removeSocketNodeEventListener(listener); addSocketNodeEventListener(listener); this.listener = listener; + } + + /** + * Returns the shutdown property of this Receiver + * @return + */ + private boolean isShutdown() { + return shutdown; + } + + /** + * @param b + */ + private void setShutdown(boolean b) { + shutdown = b; } public static class SocketDetail implements AddressBased, PortBased {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]