1
0
mirror of https://github.com/osmarks/ngircd.git synced 2025-03-04 16:38:09 +00:00

ngIRCd now handles recursive calls to Conn_Close() correctly (from HEAD).

This commit is contained in:
Alexander Barton 2003-03-09 20:16:46 +00:00
parent a156641afd
commit cb8ed9d5da
2 changed files with 20 additions and 7 deletions

View 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 )
{

View 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)
*/
@ -18,11 +18,13 @@
#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