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]

Reply via email to