You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ps...@apache.org on 2008/09/04 06:57:12 UTC

svn commit: r691872 - in /logging/log4j/companions/receivers/trunk: pom.xml src/changes/changes.xml src/main/java/org/apache/log4j/net/SocketHubReceiver.java src/main/java/org/apache/log4j/net/SocketNode13.java

Author: psmith
Date: Wed Sep  3 21:57:11 2008
New Revision: 691872

URL: http://svn.apache.org/viewvc?rev=691872&view=rev
Log:
Bug 42171 Applied patch supplied by ray@ that resolves a bug where by duplicate events are received
after a SocketHubReceiver is shutdown and then restartedi such as when used under Chainsaw.


Modified:
    logging/log4j/companions/receivers/trunk/pom.xml
    logging/log4j/companions/receivers/trunk/src/changes/changes.xml
    logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketHubReceiver.java
    logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketNode13.java

Modified: logging/log4j/companions/receivers/trunk/pom.xml
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/pom.xml?rev=691872&r1=691871&r2=691872&view=diff
==============================================================================
--- logging/log4j/companions/receivers/trunk/pom.xml (original)
+++ logging/log4j/companions/receivers/trunk/pom.xml Wed Sep  3 21:57:11 2008
@@ -216,7 +216,7 @@
     <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
-      <version>1.2.15</version>
+      <version>1.2.16-SNAPSHOT</version>
     </dependency>    
     <dependency>
       <groupId>log4j</groupId>

Modified: logging/log4j/companions/receivers/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/changes/changes.xml?rev=691872&r1=691871&r2=691872&view=diff
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/changes/changes.xml (original)
+++ logging/log4j/companions/receivers/trunk/src/changes/changes.xml Wed Sep  3 21:57:11 2008
@@ -24,6 +24,7 @@
       <action issue="42102" type="add">
         Initial release of receivers companion backported from log4j 1.3.
       </action>
+      <action issue="42171" type="fix">SocketHubReceiver duplicates messages</action>
     </release>
   </body>
 </document>

Modified: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketHubReceiver.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketHubReceiver.java?rev=691872&r1=691871&r2=691872&view=diff
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketHubReceiver.java (original)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketHubReceiver.java Wed Sep  3 21:57:11 2008
@@ -76,7 +76,7 @@
     /**
      * Socket.
      */
-  protected Socket socket;
+  protected SocketNode13 socketNode;
 
     /**
      * Listener list.
@@ -255,13 +255,14 @@
 
     // close the socket
     try {
-      if (socket != null) {
-        socket.close();
+      if (socketNode != null) {
+        socketNode.close();
+        socketNode = null;
       }
     } catch (Exception e) {
+      getLogger().info("Excpetion closing socket", e);
       // ignore for now
     }
-    socket = null;
 
     // stop the connector
     if (connector != null) {
@@ -276,11 +277,14 @@
    @param e exception not used.
    */
   public void socketClosedEvent(final Exception e) {
+    // if it is a non-normal closed event
     // we clear the connector object here
     // so that it actually does reconnect if the
     // remote socket dies.
-    connector = null;
-    fireConnector(true);
+    if (e != null) {
+      connector = null;
+      fireConnector(true);
+    }
   }
 
     /**
@@ -303,18 +307,17 @@
      */
   private synchronized void setSocket(final Socket newSocket) {
     connector = null;
-    socket = newSocket;
-    SocketNode13 node = new SocketNode13(socket, this);
-    node.addSocketNodeEventListener(this);
+    socketNode = new SocketNode13(newSocket, this);
+    socketNode.addSocketNodeEventListener(this);
 
     synchronized (listenerList) {
         for (Iterator iter = listenerList.iterator(); iter.hasNext();) {
             SocketNodeEventListener listener =
                     (SocketNodeEventListener) iter.next();
-            node.addSocketNodeEventListener(listener);
+            socketNode.addSocketNodeEventListener(listener);
         }
     }
-    new Thread(node).start();
+    new Thread(socketNode).start();
   }
 
   /**

Modified: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketNode13.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketNode13.java?rev=691872&r1=691871&r2=691872&view=diff
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketNode13.java (original)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/SocketNode13.java Wed Sep  3 21:57:11 2008
@@ -61,6 +61,10 @@
      */
   private boolean paused;
     /**
+     * Closed state.
+     */
+  private boolean closed;
+    /**
      * Socket.
      */
   private Socket socket;
@@ -165,7 +169,7 @@
       fireSocketOpened(remoteInfo);
 
       try {
-        while (true) {
+        while (!isClosed()) {
           // read an event from the wire
           event = (LoggingEvent) ois.readObject();
           event.setProperty(Constants.HOSTNAME_KEY, hostName);
@@ -173,7 +177,7 @@
           event.setProperty("log4j.remoteSourceInfo", remoteInfo);
 
           // if configured with a receiver, tell it to post the event
-          if (!isPaused()) {
+          if (!isPaused() && !isClosed()) {
             if ((receiver != null)) {
               receiver.doPost(event);
 
@@ -222,7 +226,7 @@
     }
 
     // send event to listener, if configured
-    if (listenerList.size() > 0) {
+    if (listenerList.size() > 0 && !isClosed()) {
       fireSocketClosedEvent(listenerException);
     }
   }
@@ -274,4 +278,22 @@
   public boolean isPaused() {
     return this.paused;
   }
+
+    /**
+     * Close the node and underlying socket
+     */
+  public void close() throws IOException {
+    getLogger().debug("closing socket");
+    this.closed = true;
+    socket.close();
+    fireSocketClosedEvent(null);
+  }
+  
+    /**
+     * Get if node is closed.
+     * @return true if closed.
+     */
+  public boolean isClosed() {
+    return this.closed;
+  }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org