]> arthur.barton.de Git - ngircd.git/commitdiff
ngIRCd now handles recursive calls to Conn_Close() correctly (from HEAD).
authorAlexander Barton <alex@barton.de>
Sun, 9 Mar 2003 20:16:46 +0000 (20:16 +0000)
committerAlexander Barton <alex@barton.de>
Sun, 9 Mar 2003 20:16:46 +0000 (20:16 +0000)
src/ngircd/conn.c
src/ngircd/conn.h

index bc2ccbdcb95301c2e6ad2241c78013a36633a5bc..f1bdd1cfb3d9b97c585577ffa03183e2f3d031a9 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: conn.c,v 1.106 2002/12/18 13:50:22 alex Exp $";
+static char UNUSED id[] = "$Id: conn.c,v 1.106.2.1 2003/03/09 20:16:46 alex Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -574,6 +574,18 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
        assert( Idx > NONE );
        assert( My_Connections[Idx].sock > NONE );
 
+       /* Is this link already shutting down? */
+       if( My_Connections[Idx].options & CONN_ISCLOSING )
+       {
+               /* Conn_Close() has been called recursively for this link;
+                * probabe reason: Try_Write() failed  -- see below. */
+               return;
+       }
+       /* Mark link as "closing" */
+       My_Connections[Idx].options |= CONN_ISCLOSING;
+       /* Search client, if any */
        c = Client_GetFromConn( Idx );
 
        if( InformClient )
@@ -592,9 +604,8 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
                if( My_Connections[Idx].sock == NONE ) return;
        }
 
-       /* zunaechst versuchen, noch im Schreibpuffer vorhandene
-        * Daten auf den Socket zu schreiben ... */
-       Try_Write( Idx );
+       /* Try to write out the write buffer */
+       (VOID)Try_Write( Idx );
 
        if( close( My_Connections[Idx].sock ) != 0 )
        {
index b9812156b83d077c1b63ed466c1c23b62fd1040e..f3bd43fc967dee95294bb19cca3cd82af5ddd28f 100644 (file)
@@ -8,7 +8,7 @@
  * (at your option) any later version.
  * Please read the file COPYING, README and AUTHORS for more information.
  *
- * $Id: conn.h,v 1.26 2002/12/18 13:50:22 alex Exp $
+ * $Id: conn.h,v 1.26.2.1 2003/03/09 20:16:46 alex Exp $
  *
  * Connection management (header)
  */
 #define __conn_h__
 
 
-#include <time.h>                      /* wg. time_t, s.u. */
+#include <time.h>                      /* fro time_t, see below */
 
 
+#define CONN_ISCLOSING 1               /* Conn_Close() already called */
+
 #ifdef USE_ZLIB
-#define CONN_ZIP 4                     /* Kompression mit zlib */
+#define CONN_ZIP 2                     /* zlib compressed link */
 #endif