[svn] - use a hashtable for fdlist storage. first step to making the amount of allowed clients dynamic and removing MAXCONNECTIONS.
This commit is contained in:
parent
14e23b0e1e
commit
e70f8e928e
10 changed files with 138 additions and 52 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
jilles 2007/03/05 01:14:46 UTC (20070305-3227)
|
||||||
|
Log:
|
||||||
|
Fix some cases where the size argument to strlcpy()
|
||||||
|
for usernames and hostnames is 1 too small.
|
||||||
|
|
||||||
|
|
||||||
|
Changes: Modified:
|
||||||
|
+1 -1 trunk/modules/m_chghost.c (File Modified)
|
||||||
|
+2 -2 trunk/src/res.c (File Modified)
|
||||||
|
+2 -2 trunk/src/s_user.c (File Modified)
|
||||||
|
|
||||||
|
|
||||||
jilles 2007/03/04 23:42:55 UTC (20070304-3225)
|
jilles 2007/03/04 23:42:55 UTC (20070304-3225)
|
||||||
Log:
|
Log:
|
||||||
Cut down quit/part/kick reasons to avoid quit reasons
|
Cut down quit/part/kick reasons to avoid quit reasons
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
#define SERNO "20070304-3225"
|
#define SERNO "20070305-3227"
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
* USA
|
* USA
|
||||||
*
|
*
|
||||||
* $Id: commio.c 1779 2006-07-30 16:36:39Z jilles $
|
* $Id: commio.c 3229 2007-03-05 17:23:07Z nenolod $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libcharybdis.h"
|
#include "libcharybdis.h"
|
||||||
|
@ -43,7 +43,8 @@ static const char *comm_err_str[] = { "Comm OK", "Error during bind()",
|
||||||
"Comm Error"
|
"Comm Error"
|
||||||
};
|
};
|
||||||
|
|
||||||
fde_t *fd_table = NULL;
|
#define FD_HASH_SIZE 128
|
||||||
|
static dlink_list fd_table[FD_HASH_SIZE];
|
||||||
|
|
||||||
static void fdlist_update_biggest(int fd, int opening);
|
static void fdlist_update_biggest(int fd, int opening);
|
||||||
|
|
||||||
|
@ -56,9 +57,60 @@ static PF comm_connect_timeout;
|
||||||
static void comm_connect_dns_callback(void *vptr, struct DNSReply *reply);
|
static void comm_connect_dns_callback(void *vptr, struct DNSReply *reply);
|
||||||
static PF comm_connect_tryconnect;
|
static PF comm_connect_tryconnect;
|
||||||
|
|
||||||
|
inline fde_t *
|
||||||
|
comm_locate_fd(int fd)
|
||||||
|
{
|
||||||
|
int bucket = fd % FD_HASH_SIZE;
|
||||||
|
dlink_list *list = &fd_table[bucket];
|
||||||
|
dlink_node *n;
|
||||||
|
|
||||||
|
DLINK_FOREACH(n, list->head)
|
||||||
|
{
|
||||||
|
fde_t *F = (fde_t *) n->data;
|
||||||
|
|
||||||
|
if (F->fd == fd)
|
||||||
|
return F;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fde_t *
|
||||||
|
comm_add_fd(int fd)
|
||||||
|
{
|
||||||
|
fde_t *F = comm_locate_fd(fd);
|
||||||
|
dlink_list *list;
|
||||||
|
|
||||||
|
if (F != NULL)
|
||||||
|
return F;
|
||||||
|
|
||||||
|
F = calloc(sizeof(fde_t), 1);
|
||||||
|
F->fd = fd;
|
||||||
|
list = &fd_table[fd % FD_HASH_SIZE];
|
||||||
|
dlinkAdd(F, &F->node, list);
|
||||||
|
|
||||||
|
return F;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
comm_remove_fd(int fd)
|
||||||
|
{
|
||||||
|
int bucket = fd % FD_HASH_SIZE;
|
||||||
|
fde_t *F;
|
||||||
|
dlink_list *list = &fd_table[bucket];
|
||||||
|
|
||||||
|
F = comm_locate_fd(fd);
|
||||||
|
if (F == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
dlinkDelete(&F->node, list);
|
||||||
|
MyFree(F);
|
||||||
|
}
|
||||||
|
|
||||||
/* 32bit solaris is kinda slow and stdio only supports fds < 256
|
/* 32bit solaris is kinda slow and stdio only supports fds < 256
|
||||||
* so we got to do this crap below.
|
* so we got to do this crap below.
|
||||||
* (BTW Fuck you Sun, I hate your guts and I hope you go bankrupt soon)
|
* (BTW Fuck you Sun, I hate your guts and I hope you go bankrupt soon)
|
||||||
|
* XXX: this is no longer needed in Solaris 10. --nenolod
|
||||||
*/
|
*/
|
||||||
#if defined (__SVR4) && defined (__sun)
|
#if defined (__SVR4) && defined (__sun)
|
||||||
static void comm_fd_hack(int *fd)
|
static void comm_fd_hack(int *fd)
|
||||||
|
@ -93,7 +145,9 @@ comm_close_all(void)
|
||||||
|
|
||||||
for (i = 4; i < MAXCONNECTIONS; ++i)
|
for (i = 4; i < MAXCONNECTIONS; ++i)
|
||||||
{
|
{
|
||||||
if(fd_table[i].flags.open)
|
fde_t *F = comm_locate_fd(i);
|
||||||
|
|
||||||
|
if(F != NULL && F->flags.open)
|
||||||
comm_close(i);
|
comm_close(i);
|
||||||
else
|
else
|
||||||
close(i);
|
close(i);
|
||||||
|
@ -168,13 +222,16 @@ comm_set_nb(int fd)
|
||||||
{
|
{
|
||||||
int nonb = 0;
|
int nonb = 0;
|
||||||
int res;
|
int res;
|
||||||
|
fde_t *F = comm_locate_fd(fd);
|
||||||
|
|
||||||
nonb |= O_NONBLOCK;
|
nonb |= O_NONBLOCK;
|
||||||
res = fcntl(fd, F_GETFL, 0);
|
res = fcntl(fd, F_GETFL, 0);
|
||||||
if(-1 == res || fcntl(fd, F_SETFL, res | nonb) == -1)
|
if(-1 == res || fcntl(fd, F_SETFL, res | nonb) == -1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fd_table[fd].flags.nonblocking = 1;
|
if (F != NULL)
|
||||||
|
F->flags.nonblocking = 1;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +274,7 @@ comm_settimeout(int fd, time_t timeout, PF * callback, void *cbdata)
|
||||||
{
|
{
|
||||||
fde_t *F;
|
fde_t *F;
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
F = &fd_table[fd];
|
F = comm_locate_fd(fd);
|
||||||
s_assert(F->flags.open);
|
s_assert(F->flags.open);
|
||||||
|
|
||||||
F->timeout = CurrentTime + (timeout / 1000);
|
F->timeout = CurrentTime + (timeout / 1000);
|
||||||
|
@ -241,7 +298,7 @@ comm_setflush(int fd, time_t timeout, PF * callback, void *cbdata)
|
||||||
{
|
{
|
||||||
fde_t *F;
|
fde_t *F;
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
F = &fd_table[fd];
|
F = comm_locate_fd(fd);
|
||||||
s_assert(F->flags.open);
|
s_assert(F->flags.open);
|
||||||
|
|
||||||
F->flush_timeout = CurrentTime + (timeout / 1000);
|
F->flush_timeout = CurrentTime + (timeout / 1000);
|
||||||
|
@ -266,7 +323,9 @@ comm_checktimeouts(void *notused)
|
||||||
fde_t *F;
|
fde_t *F;
|
||||||
for (fd = 0; fd <= highest_fd; fd++)
|
for (fd = 0; fd <= highest_fd; fd++)
|
||||||
{
|
{
|
||||||
F = &fd_table[fd];
|
F = comm_locate_fd(fd);
|
||||||
|
if(F == NULL)
|
||||||
|
continue;
|
||||||
if(!F->flags.open)
|
if(!F->flags.open)
|
||||||
continue;
|
continue;
|
||||||
if(F->flags.closing)
|
if(F->flags.closing)
|
||||||
|
@ -316,7 +375,7 @@ comm_connect_tcp(int fd, const char *host, u_short port,
|
||||||
void *ipptr = NULL;
|
void *ipptr = NULL;
|
||||||
fde_t *F;
|
fde_t *F;
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
F = &fd_table[fd];
|
F = comm_locate_fd(fd);
|
||||||
F->flags.called_connect = 1;
|
F->flags.called_connect = 1;
|
||||||
s_assert(callback);
|
s_assert(callback);
|
||||||
F->connect.callback = callback;
|
F->connect.callback = callback;
|
||||||
|
@ -388,10 +447,12 @@ static void
|
||||||
comm_connect_callback(int fd, int status)
|
comm_connect_callback(int fd, int status)
|
||||||
{
|
{
|
||||||
CNCB *hdl;
|
CNCB *hdl;
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
|
|
||||||
/* This check is gross..but probably necessary */
|
/* This check is gross..but probably necessary */
|
||||||
if(F->connect.callback == NULL)
|
if(F == NULL || F->connect.callback == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Clear the connect flag + handler */
|
/* Clear the connect flag + handler */
|
||||||
hdl = F->connect.callback;
|
hdl = F->connect.callback;
|
||||||
F->connect.callback = NULL;
|
F->connect.callback = NULL;
|
||||||
|
@ -473,13 +534,13 @@ static void
|
||||||
comm_connect_tryconnect(int fd, void *notused)
|
comm_connect_tryconnect(int fd, void *notused)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
|
|
||||||
if(F->connect.callback == NULL)
|
if(F->connect.callback == NULL)
|
||||||
return;
|
return;
|
||||||
/* Try the connect() */
|
/* Try the connect() */
|
||||||
retval = connect(fd, (struct sockaddr *) &fd_table[fd].connect.hostaddr,
|
retval = connect(fd, (struct sockaddr *) &F->connect.hostaddr,
|
||||||
GET_SS_LEN(fd_table[fd].connect.hostaddr));
|
GET_SS_LEN(F->connect.hostaddr));
|
||||||
/* Error? */
|
/* Error? */
|
||||||
if(retval < 0)
|
if(retval < 0)
|
||||||
{
|
{
|
||||||
|
@ -667,7 +728,7 @@ fdlist_update_biggest(int fd, int opening)
|
||||||
* re-opening it
|
* re-opening it
|
||||||
*/
|
*/
|
||||||
s_assert(!opening);
|
s_assert(!opening);
|
||||||
while (highest_fd >= 0 && !fd_table[highest_fd].flags.open)
|
while (highest_fd >= 0 && comm_locate_fd(fd)->flags.open) /* XXX */
|
||||||
highest_fd--;
|
highest_fd--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -679,8 +740,7 @@ fdlist_init(void)
|
||||||
|
|
||||||
if(!initialized)
|
if(!initialized)
|
||||||
{
|
{
|
||||||
/* Since we're doing this once .. */
|
memset(&fd_table, '\0', sizeof(dlink_list) * FD_HASH_SIZE);
|
||||||
fd_table = MyMalloc((MAXCONNECTIONS + 1) * sizeof(fde_t));
|
|
||||||
initialized = 1;
|
initialized = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -689,7 +749,7 @@ fdlist_init(void)
|
||||||
void
|
void
|
||||||
comm_open(int fd, unsigned int type, const char *desc)
|
comm_open(int fd, unsigned int type, const char *desc)
|
||||||
{
|
{
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_add_fd(fd);
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
|
|
||||||
if(F->flags.open)
|
if(F->flags.open)
|
||||||
|
@ -718,7 +778,7 @@ comm_open(int fd, unsigned int type, const char *desc)
|
||||||
void
|
void
|
||||||
comm_close(int fd)
|
comm_close(int fd)
|
||||||
{
|
{
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
s_assert(F->flags.open);
|
s_assert(F->flags.open);
|
||||||
/* All disk fd's MUST go through file_close() ! */
|
/* All disk fd's MUST go through file_close() ! */
|
||||||
s_assert(F->type != FD_FILE);
|
s_assert(F->type != FD_FILE);
|
||||||
|
@ -740,13 +800,13 @@ comm_close(int fd)
|
||||||
F->flags.open = 0;
|
F->flags.open = 0;
|
||||||
fdlist_update_biggest(fd, 0);
|
fdlist_update_biggest(fd, 0);
|
||||||
number_fd--;
|
number_fd--;
|
||||||
memset(F, '\0', sizeof(fde_t));
|
comm_remove_fd(fd);
|
||||||
|
|
||||||
F->timeout = 0;
|
F->timeout = 0;
|
||||||
/* Unlike squid, we're actually closing the FD here! -- adrian */
|
/* Unlike squid, we're actually closing the FD here! -- adrian */
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* comm_dump() - dump the list of active filedescriptors
|
* comm_dump() - dump the list of active filedescriptors
|
||||||
*/
|
*/
|
||||||
|
@ -755,14 +815,24 @@ comm_dump(struct Client *source_p)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i <= highest_fd; i++)
|
for (i = 0; i <= FD_HASH_SIZE; i++)
|
||||||
{
|
{
|
||||||
if(!fd_table[i].flags.open)
|
dlink_node *n;
|
||||||
|
|
||||||
|
if (dlink_list_length(&fd_table[i]) <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
sendto_one_numeric(source_p, RPL_STATSDEBUG,
|
DLINK_FOREACH(n, fd_table[i].head)
|
||||||
"F :fd %-3d desc '%s'",
|
{
|
||||||
i, fd_table[i].desc);
|
fde_t *F = (fde_t *) n->data;
|
||||||
|
|
||||||
|
if(F == NULL || !F->flags.open)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sendto_one_numeric(source_p, RPL_STATSDEBUG,
|
||||||
|
"F :fd %-3d bucket %-3d desc '%s'",
|
||||||
|
F->fd, i, F->desc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -776,15 +846,16 @@ void
|
||||||
comm_note(int fd, const char *format, ...)
|
comm_note(int fd, const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
fde_t *F = comm_add_fd(fd); /* XXX: epoll, kqueue. */
|
||||||
|
|
||||||
if(format)
|
if(format)
|
||||||
{
|
{
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
ircvsnprintf(fd_table[fd].desc, FD_DESC_SZ, format, args);
|
ircvsnprintf(F->desc, FD_DESC_SZ, format, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fd_table[fd].desc[0] = '\0';
|
F->desc[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
* USA
|
* USA
|
||||||
*
|
*
|
||||||
* $Id: commio.h 1757 2006-07-25 23:34:45Z jilles $
|
* $Id: commio.h 3229 2007-03-05 17:23:07Z nenolod $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INCLUDED_commio_h
|
#ifndef INCLUDED_commio_h
|
||||||
|
@ -30,6 +30,7 @@
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "ircd_defs.h"
|
#include "ircd_defs.h"
|
||||||
|
#include "tools.h"
|
||||||
|
|
||||||
/* Callback for completed IO events */
|
/* Callback for completed IO events */
|
||||||
typedef void PF(int fd, void *);
|
typedef void PF(int fd, void *);
|
||||||
|
@ -128,11 +129,10 @@ struct _fde
|
||||||
}
|
}
|
||||||
connect;
|
connect;
|
||||||
int pflags;
|
int pflags;
|
||||||
|
dlink_node node;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
extern fde_t *fd_table;
|
|
||||||
|
|
||||||
void fdlist_init(void);
|
void fdlist_init(void);
|
||||||
|
|
||||||
extern void comm_open(int, unsigned int, const char *);
|
extern void comm_open(int, unsigned int, const char *);
|
||||||
|
@ -188,5 +188,6 @@ extern void mangle_mapped_sockaddr(struct sockaddr *in);
|
||||||
#define mangle_mapped_sockaddr(x)
|
#define mangle_mapped_sockaddr(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern fde_t *comm_locate_fd(int fd);
|
||||||
|
|
||||||
#endif /* INCLUDED_commio_h */
|
#endif /* INCLUDED_commio_h */
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
* USA
|
* USA
|
||||||
*
|
*
|
||||||
* $Id: devpoll.c 390 2005-12-07 18:46:56Z nenolod $
|
* $Id: devpoll.c 3229 2007-03-05 17:23:07Z nenolod $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -77,24 +77,26 @@ devpoll_update_events(int fd, short filter, PF * handler)
|
||||||
int cur_mask = fdmask[fd];
|
int cur_mask = fdmask[fd];
|
||||||
PF *cur_handler;
|
PF *cur_handler;
|
||||||
fdmask[fd] = 0;
|
fdmask[fd] = 0;
|
||||||
|
fde_t *F = comm_locate_fd(fd);
|
||||||
|
|
||||||
switch (filter)
|
switch (filter)
|
||||||
{
|
{
|
||||||
case COMM_SELECT_READ:
|
case COMM_SELECT_READ:
|
||||||
cur_handler = fd_table[fd].read_handler;
|
cur_handler = F->read_handler;
|
||||||
if(handler)
|
if(handler)
|
||||||
fdmask[fd] |= POLLRDNORM;
|
fdmask[fd] |= POLLRDNORM;
|
||||||
else
|
else
|
||||||
fdmask[fd] &= ~POLLRDNORM;
|
fdmask[fd] &= ~POLLRDNORM;
|
||||||
if(fd_table[fd].write_handler)
|
if(F->write_handler)
|
||||||
fdmask[fd] |= POLLWRNORM;
|
fdmask[fd] |= POLLWRNORM;
|
||||||
break;
|
break;
|
||||||
case COMM_SELECT_WRITE:
|
case COMM_SELECT_WRITE:
|
||||||
cur_handler = fd_table[fd].write_handler;
|
cur_handler = F->write_handler;
|
||||||
if(handler)
|
if(handler)
|
||||||
fdmask[fd] |= POLLWRNORM;
|
fdmask[fd] |= POLLWRNORM;
|
||||||
else
|
else
|
||||||
fdmask[fd] &= ~POLLWRNORM;
|
fdmask[fd] &= ~POLLWRNORM;
|
||||||
if(fd_table[fd].read_handler)
|
if(F->read_handler)
|
||||||
fdmask[fd] |= POLLRDNORM;
|
fdmask[fd] |= POLLRDNORM;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -166,7 +168,7 @@ void
|
||||||
comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
||||||
void *client_data, time_t timeout)
|
void *client_data, time_t timeout)
|
||||||
{
|
{
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
s_assert(F->flags.open);
|
s_assert(F->flags.open);
|
||||||
|
|
||||||
|
@ -235,7 +237,7 @@ comm_select(unsigned long delay)
|
||||||
{
|
{
|
||||||
int fd = dopoll.dp_fds[i].fd;
|
int fd = dopoll.dp_fds[i].fd;
|
||||||
PF *hdl = NULL;
|
PF *hdl = NULL;
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
if((dopoll.dp_fds[i].
|
if((dopoll.dp_fds[i].
|
||||||
revents & (POLLRDNORM | POLLIN | POLLHUP |
|
revents & (POLLRDNORM | POLLIN | POLLHUP |
|
||||||
POLLERR))
|
POLLERR))
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
* USA
|
* USA
|
||||||
*
|
*
|
||||||
* $Id: epoll.c 390 2005-12-07 18:46:56Z nenolod $
|
* $Id: epoll.c 3229 2007-03-05 17:23:07Z nenolod $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -80,7 +80,7 @@ comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
||||||
void *client_data, time_t timeout)
|
void *client_data, time_t timeout)
|
||||||
{
|
{
|
||||||
struct epoll_event ep_event;
|
struct epoll_event ep_event;
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
int old_flags = F->pflags;
|
int old_flags = F->pflags;
|
||||||
int op = -1;
|
int op = -1;
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
* USA
|
* USA
|
||||||
*
|
*
|
||||||
* $Id: kqueue.c 3205 2007-02-09 22:18:23Z nenolod $
|
* $Id: kqueue.c 3229 2007-03-05 17:23:07Z nenolod $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdinc.h"
|
#include "stdinc.h"
|
||||||
|
@ -156,7 +156,7 @@ void
|
||||||
comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
||||||
void *client_data, time_t timeout)
|
void *client_data, time_t timeout)
|
||||||
{
|
{
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
s_assert(F->flags.open);
|
s_assert(F->flags.open);
|
||||||
|
|
||||||
|
@ -239,7 +239,7 @@ comm_select(unsigned long delay)
|
||||||
{
|
{
|
||||||
int fd = (int) ke[i].ident;
|
int fd = (int) ke[i].ident;
|
||||||
PF *hdl = NULL;
|
PF *hdl = NULL;
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
|
|
||||||
if(ke[i].flags & EV_ERROR)
|
if(ke[i].flags & EV_ERROR)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
* USA
|
* USA
|
||||||
*
|
*
|
||||||
* $Id: poll.c 390 2005-12-07 18:46:56Z nenolod $
|
* $Id: poll.c 3229 2007-03-05 17:23:07Z nenolod $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -81,7 +81,7 @@ poll_findslot(void)
|
||||||
static void
|
static void
|
||||||
poll_update_pollfds(int fd, short event, PF * handler)
|
poll_update_pollfds(int fd, short event, PF * handler)
|
||||||
{
|
{
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_table(fd);
|
||||||
int comm_index;
|
int comm_index;
|
||||||
|
|
||||||
if(F->comm_index < 0)
|
if(F->comm_index < 0)
|
||||||
|
@ -155,7 +155,7 @@ void
|
||||||
comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
||||||
void *client_data, time_t timeout)
|
void *client_data, time_t timeout)
|
||||||
{
|
{
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
s_assert(F->flags.open);
|
s_assert(F->flags.open);
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ comm_select(unsigned long delay)
|
||||||
(pollfd_list.pollfds[ci].fd) == -1)
|
(pollfd_list.pollfds[ci].fd) == -1)
|
||||||
continue;
|
continue;
|
||||||
fd = pollfd_list.pollfds[ci].fd;
|
fd = pollfd_list.pollfds[ci].fd;
|
||||||
F = &fd_table[fd];
|
F = comm_locate_fd(fd);
|
||||||
if(revents & (POLLRDNORM | POLLIN | POLLHUP | POLLERR))
|
if(revents & (POLLRDNORM | POLLIN | POLLHUP | POLLERR))
|
||||||
{
|
{
|
||||||
hdl = F->read_handler;
|
hdl = F->read_handler;
|
||||||
|
|
|
@ -98,7 +98,7 @@ void
|
||||||
ircd_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
ircd_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
||||||
void *client_data)
|
void *client_data)
|
||||||
{
|
{
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
s_assert(F->flags.open);
|
s_assert(F->flags.open);
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ ircd_select(unsigned long delay)
|
||||||
case PORT_SOURCE_FD:
|
case PORT_SOURCE_FD:
|
||||||
fd = pelst[i].portev_object;
|
fd = pelst[i].portev_object;
|
||||||
PF *hdl = NULL;
|
PF *hdl = NULL;
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
|
|
||||||
if ((pelst[i].portev_events & POLLRDNORM) && (hdl = F->read_handler)) {
|
if ((pelst[i].portev_events & POLLRDNORM) && (hdl = F->read_handler)) {
|
||||||
F->read_handler = NULL;
|
F->read_handler = NULL;
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
* USA
|
* USA
|
||||||
*
|
*
|
||||||
* $Id: select.c 390 2005-12-07 18:46:56Z nenolod $
|
* $Id: select.c 3229 2007-03-05 17:23:07Z nenolod $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -105,7 +105,7 @@ void
|
||||||
comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
comm_setselect(int fd, fdlist_t list, unsigned int type, PF * handler,
|
||||||
void *client_data, time_t timeout)
|
void *client_data, time_t timeout)
|
||||||
{
|
{
|
||||||
fde_t *F = &fd_table[fd];
|
fde_t *F = comm_locate_fd(fd);
|
||||||
s_assert(fd >= 0);
|
s_assert(fd >= 0);
|
||||||
s_assert(F->flags.open);
|
s_assert(F->flags.open);
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ comm_select(unsigned long delay)
|
||||||
/* XXX we *could* optimise by falling out after doing num fds ... */
|
/* XXX we *could* optimise by falling out after doing num fds ... */
|
||||||
for (fd = 0; fd < highest_fd + 1; fd++)
|
for (fd = 0; fd < highest_fd + 1; fd++)
|
||||||
{
|
{
|
||||||
F = &fd_table[fd];
|
F = comm_locate_fd(fd);
|
||||||
|
|
||||||
if(FD_ISSET(fd, &tmpreadfds))
|
if(FD_ISSET(fd, &tmpreadfds))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue