commit cf4ad8d6f7f9adffda596d67551811ac26f6a35a from: Alexander Barton date: Fri Feb 21 19:19:27 2003 UTC - Conn_Close() ignores recursive calls for the same link now. commit - 2a3f8cc57d1e4797731e6e06649b32e57067c19b commit + cf4ad8d6f7f9adffda596d67551811ac26f6a35a blob - 1819e36f62eb70105ed76a002471dd492769f5db blob + 37c5c3819a49390a298bfcb80a33b7919595d1f8 --- src/ngircd/conn.c +++ src/ngircd/conn.c @@ -16,7 +16,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: conn.c,v 1.115 2003/01/15 14:28:59 alex Exp $"; +static char UNUSED id[] = "$Id: conn.c,v 1.116 2003/02/21 19:19:27 alex Exp $"; #include "imp.h" #include @@ -529,6 +529,17 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, B 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 ); @@ -550,7 +561,7 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, B } /* Try to write out the write buffer */ - Try_Write( Idx ); + (VOID)Try_Write( Idx ); /* Shut down socket */ if( close( My_Connections[Idx].sock ) != 0 )