repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 429b5f3ec9914a512708d1a718a9e40476a6c623:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 429b5f3ec9914a512708d1a718a9e40476a6c623
Author: Alexander Barton 
Date:   Mon Jan 17 11:57:39 2005 +0000

    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, .

diff --git a/ChangeLog b/ChangeLog
index c5b9ddcd6c780c8d3c4522350a6d76832fac4e7f..
index ..1162c9d0dea4c7c0d6231996c9831bb30cc0cbe1 100644
--- a/ChangeLog
+++ b/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, .
   - 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 $
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index f0bf5f08353989dba066f76239efa003d9940ca6..
index ..aad61494a0a62e70d2fa8679006af15735a1afee 100644
--- a/src/ngircd/conn.c
+++ b/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 
@@ -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 */

-----END OF PAGE-----