repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 4243cae985578f0c5c961f9a6aca79d235e07467:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 4243cae985578f0c5c961f9a6aca79d235e07467
Author: Florian Westphal 
Date:   Mon Dec 25 01:11:12 2006 +0000

    register io handler before creating new local client structure

diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index 4d5afa6c9a29722e48cfb310af690dd4190e82fc..
index ..60128eae429d3439025dc7d558485c9a8be9ae23 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -17,7 +17,7 @@
 #include "portab.h"
 #include "io.h"

-static char UNUSED id[] = "$Id: conn.c,v 1.200 2006/12/17 23:04:45 fw Exp $";
+static char UNUSED id[] = "$Id: conn.c,v 1.201 2006/12/25 01:11:12 fw Exp $";

 #include "imp.h"
 #include 
@@ -995,11 +995,19 @@ New_Connection( int Sock )
 			Init_Conn_Struct(Pool_Size++);
 	}

+	/* register callback */
+	if (!io_event_create( new_sock, IO_WANTREAD, cb_clientserver)) {
+		Log(LOG_ALERT, "Can't accept connection: io_event_create failed!");
+		Simple_Message(new_sock, "ERROR :Internal error");
+		close(new_sock);
+		return -1;
+	}
+
 	c = Client_NewLocal( new_sock, inet_ntoa( new_addr.sin_addr ), CLIENT_UNKNOWN, false );
 	if( ! c ) {
-		Log( LOG_ALERT, "Can't accept connection: can't create client structure!" );
-		Simple_Message( new_sock, "ERROR :Internal error" );
-		close( new_sock );
+		Log(LOG_ALERT, "Can't accept connection: can't create client structure!");
+		Simple_Message(new_sock, "ERROR :Internal error");
+		io_close(new_sock);
 		return -1;
 	}

@@ -1008,13 +1016,6 @@ New_Connection( int Sock )
 	My_Connections[new_sock].addr = new_addr;
 	My_Connections[new_sock].client = c;

-	/* register callback */
-	if (!io_event_create( new_sock, IO_WANTREAD, cb_clientserver)) {
-		Simple_Message( new_sock, "ERROR :Internal error" );
-		Conn_Close( new_sock, "io_event_create() failed", NULL, false );
-		return -1;
-	}
-
 	Log( LOG_INFO, "Accepted connection %d from %s:%d on socket %d.", new_sock,
 			inet_ntoa( new_addr.sin_addr ), ntohs( new_addr.sin_port), Sock );

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