Commit Diff


commit - 81bacda627ee3f9e69212ddd8ab804e7d15f8c16
commit + 429b5f3ec9914a512708d1a718a9e40476a6c623
blob - c5b9ddcd6c780c8d3c4522350a6d76832fac4e7f
blob + 1162c9d0dea4c7c0d6231996c9831bb30cc0cbe1
--- ChangeLog
+++ ChangeLog
@@ -12,6 +12,9 @@
 
 ngIRCd CVSHEAD
 
+  - Fixed a memory leak when resizing the connection pool and realloc()
+    failed. Now we don't fall back to malloc(), which should be sane anyway.
+    Patch from Florian Westphal, <westphal@foo.fh-furtwangen.de>.
   - Added support for the Howl (http://www.porchdogsoft.com/products/howl/)
     Rendezvous API, in addition to the API of Apple (Mac OS X). The available
     APU will be autodetected when you call "./configure --with-rendezvous".
@@ -553,4 +556,4 @@ ngIRCd 0.0.1, 31.12.2001
 
 
 -- 
-$Id: ChangeLog,v 1.248 2004/12/26 00:14:33 alex Exp $
+$Id: ChangeLog,v 1.249 2005/01/17 11:57:39 alex Exp $
blob - f0bf5f08353989dba066f76239efa003d9940ca6
blob + aad61494a0a62e70d2fa8679006af15735a1afee
--- src/ngircd/conn.c
+++ src/ngircd/conn.c
@@ -16,7 +16,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: conn.c,v 1.141 2004/12/22 17:37:41 alex Exp $";
+static char UNUSED id[] = "$Id: conn.c,v 1.142 2005/01/17 11:57:39 alex Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -1012,32 +1012,17 @@ New_Connection( INT Sock )
 			return;
 		}
 
-		/* zunaechst realloc() versuchen; wenn das scheitert, malloc() versuchen
-		 * und Daten ggf. "haendisch" umkopieren. (Haesslich! Eine wirklich
-		 * dynamische Verwaltung waere wohl _deutlich_ besser ...) */
 		ptr = (POINTER *)realloc( My_Connections, sizeof( CONNECTION ) * new_size );
 		if( ! ptr )
 		{
-			/* realloc() ist fehlgeschlagen. Nun malloc() probieren: */
-			ptr = (POINTER *)malloc( sizeof( CONNECTION ) * new_size );
-			if( ! ptr )
-			{
-				/* Offenbar steht kein weiterer Sepeicher zur Verfuegung :-( */
-				Log( LOG_EMERG, "Can't allocate memory! [New_Connection]" );
-				Simple_Message( new_sock, "ERROR: Internal error" );
-				close( new_sock );
-				return;
-			}
-
-			/* Struktur umkopieren ... */
-			memcpy( ptr, My_Connections, sizeof( CONNECTION ) * Pool_Size );
-
-#ifdef DEBUG
-			Log( LOG_DEBUG, "Allocated new connection pool for %ld items (%ld bytes). [malloc()/memcpy()]", new_size, sizeof( CONNECTION ) * new_size );
-#endif
+			Log( LOG_EMERG, "Can't allocate memory! [New_Connection]" );
+			Simple_Message( new_sock, "ERROR: Internal error" );
+			close( new_sock );
+			return;
 		}
+
 #ifdef DEBUG
-		else Log( LOG_DEBUG, "Allocated new connection pool for %ld items (%ld bytes). [realloc()]", new_size, sizeof( CONNECTION ) * new_size );
+		Log( LOG_DEBUG, "Allocated new connection pool for %ld items (%ld bytes). [realloc()]", new_size, sizeof( CONNECTION ) * new_size );
 #endif
 
 		/* Adjust pointer to new block */