carnold     2004/12/20 17:49:25

  Modified:    src/java/org/apache/log4j/net TelnetAppender.java
  Log:
  Bug 22369: TelnetAppender removes elements while iterating
  
  Revision  Changes    Path
  1.11      +13 -8     
logging-log4j/src/java/org/apache/log4j/net/TelnetAppender.java
  
  Index: TelnetAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/TelnetAppender.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- TelnetAppender.java       21 Dec 2004 01:24:09 -0000      1.10
  +++ TelnetAppender.java       21 Dec 2004 01:49:25 -0000      1.11
  @@ -153,18 +153,23 @@
   
       /** sends a message to each of the clients in telnet-friendly output. */
       public void send(String message) {
  -      Enumeration ce = connections.elements();
  -
  +      boolean hasWriterError = false;
         for (Enumeration e = writers.elements(); e.hasMoreElements();) {
  -        Socket sock = (Socket) ce.nextElement();
           PrintWriter writer = (PrintWriter) e.nextElement();
           writer.print(message);
  +        hasWriterError |= writer.checkError();
   
  -        if (writer.checkError()) {
  -          // The client has closed the connection, remove it from our list:
  -          connections.remove(sock);
  -          writers.remove(writer);
  -        }
  +      }
  +      //
  +      //   if any writer had an error then
  +      //       check all writers and remove any bad ones
  +      if(hasWriterError) {
  +         for (int i = writers.size() - 1; i >= 0; i--) {
  +            if (((PrintWriter) writers.elementAt(i)).checkError()) {
  +                writers.remove(i);
  +                connections.remove(i);
  +            }
  +         }
         }
       }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to