commit 3d49fa5bffac43f2fcf535c8b1aedae732d1f9f5 from: Alexander Barton date: Tue Jun 29 21:38:39 2010 UTC New function Conn_GetFromProc() to get CONN_ID of a subprocess Get CONN_ID from file descriptor associated to a subprocess structure. commit - 2d4ea288353c2240c8d13e41c8da1557fc32168b commit + 3d49fa5bffac43f2fcf535c8b1aedae732d1f9f5 blob - 0d82d530b80733dc23fd18e827b5142bfd06ca54 blob + 4df1e9e4f88e644b3df309f5bb1007c2aee44be3 --- src/ngircd/conn.c +++ src/ngircd/conn.c @@ -1986,7 +1986,7 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events * IDENT user name.*/ CLIENT *c; - int i; + CONN_ID i; size_t len; char *identptr; #ifdef IDENTAUTH @@ -1996,14 +1996,8 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events #endif LogDebug("Resolver: Got callback on fd %d, events %d", r_fd, events ); - - /* Search associated connection ... */ - for( i = 0; i < Pool_Size; i++ ) { - if(( My_Connections[i].sock != NONE ) - && (Proc_GetPipeFd(&My_Connections[i].proc_stat) == r_fd)) - break; - } - if( i >= Pool_Size ) { + i = Conn_GetFromProc(r_fd); + if (i == NONE) { /* Ops, none found? Probably the connection has already * been closed!? We'll ignore that ... */ io_close( r_fd ); @@ -2106,8 +2100,28 @@ Conn_GetClient( CONN_ID Idx ) assert(c != NULL); return c ? c->client : NULL; } + + +/** + * Get CONN_ID from file descriptor associated to a subprocess structure. + * @param fd File descriptor + * @return CONN_ID or NONE (-1) + */ +GLOBAL CONN_ID +Conn_GetFromProc(int fd) +{ + int i; + assert(fd > 0); + for (i = 0; i < Pool_Size; i++) { + if ((My_Connections[i].sock != NONE) + && (Proc_GetPipeFd(&My_Connections[i].proc_stat) == fd)) + return i; + } + return NONE; +} /* Conn_GetFromProc */ + #ifdef SSL_SUPPORT /** blob - 7665bb374166bc501c19c6057cb7afd68e0dca63 blob + e9b470bcf1327d08bdd3cf0598762ddc831a5326 --- src/ngircd/conn.h +++ src/ngircd/conn.h @@ -113,6 +113,7 @@ GLOBAL void Conn_Close PARAMS(( CONN_ID Idx, const cha GLOBAL void Conn_SyncServerStruct PARAMS(( void )); +GLOBAL CONN_ID Conn_GetFromProc PARAMS((int fd)); GLOBAL CLIENT* Conn_GetClient PARAMS((CONN_ID i)); #ifdef SSL_SUPPORT GLOBAL bool Conn_GetCipherInfo PARAMS((CONN_ID Idx, char *buf, size_t len));