mirror of
https://github.com/NLnetLabs/unbound.git
synced 2026-02-11 06:43:40 -05:00
more capacity for winsock handler.
git-svn-id: file:///svn/unbound/trunk@1604 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
f3d98d17f4
commit
6a152952bf
3 changed files with 22 additions and 15 deletions
|
|
@ -1,6 +1,7 @@
|
|||
17 April 2009: Wouter
|
||||
- Fix reentrant in minievent handler for unix. Could have resulted
|
||||
in spurious event callbacks.
|
||||
- timers do not take up a fd slot for winsock handler.
|
||||
|
||||
16 April 2009: Wouter
|
||||
- winsock event handler exit very quickly on signal, even if
|
||||
|
|
|
|||
|
|
@ -87,11 +87,13 @@ config_create()
|
|||
cfg->log_time_ascii = 0;
|
||||
#ifndef USE_WINSOCK
|
||||
cfg->outgoing_num_ports = 256;
|
||||
#else
|
||||
cfg->outgoing_num_ports = 16; /* windows is limited in num fds */
|
||||
#endif
|
||||
cfg->outgoing_num_tcp = 10;
|
||||
cfg->incoming_num_tcp = 10;
|
||||
#else
|
||||
cfg->outgoing_num_ports = 48; /* windows is limited in num fds */
|
||||
cfg->outgoing_num_tcp = 2; /* leaves 64-52=12 for: 4if,1stop,thread4 */
|
||||
cfg->incoming_num_tcp = 2;
|
||||
#endif
|
||||
cfg->msg_buffer_size = 65552; /* 64 k + a small margin */
|
||||
cfg->msg_cache_size = 4 * 1024 * 1024;
|
||||
cfg->msg_cache_slabs = 4;
|
||||
|
|
|
|||
|
|
@ -495,10 +495,6 @@ int event_add(struct event *ev, struct timeval *tv)
|
|||
if(ev->added)
|
||||
event_del(ev);
|
||||
log_assert(ev->ev_fd==-1 || find_fd(ev->ev_base, ev->ev_fd) == -1);
|
||||
if(ev->ev_base->max == ev->ev_base->cap)
|
||||
return -1;
|
||||
ev->idx = ev->ev_base->max++;
|
||||
ev->ev_base->items[ev->idx] = ev;
|
||||
ev->is_tcp = 0;
|
||||
ev->is_signal = 0;
|
||||
ev->just_checked = 0;
|
||||
|
|
@ -507,6 +503,12 @@ int event_add(struct event *ev, struct timeval *tv)
|
|||
BOOL b=0;
|
||||
int t, l;
|
||||
long events = 0;
|
||||
|
||||
if(ev->ev_base->max == ev->ev_base->cap)
|
||||
return -1;
|
||||
ev->idx = ev->ev_base->max++;
|
||||
ev->ev_base->items[ev->idx] = ev;
|
||||
|
||||
if( (ev->ev_events&EV_READ) )
|
||||
events |= FD_READ;
|
||||
if( (ev->ev_events&EV_WRITE) )
|
||||
|
|
@ -574,17 +576,19 @@ int event_del(struct event *ev)
|
|||
(ev->ev_events&EV_TIMEOUT)?" EV_TIMEOUT":"");
|
||||
if(!ev->added)
|
||||
return 0;
|
||||
log_assert(ev->added && ev->ev_base->max > 0)
|
||||
/* remove item and compact the list */
|
||||
ev->ev_base->items[ev->idx] = ev->ev_base->items[ev->ev_base->max-1];
|
||||
ev->ev_base->items[ev->ev_base->max-1] = NULL;
|
||||
ev->ev_base->max--;
|
||||
if(ev->idx < ev->ev_base->max)
|
||||
ev->ev_base->items[ev->idx]->idx = ev->idx;
|
||||
|
||||
log_assert(ev->added);
|
||||
if((ev->ev_events&EV_TIMEOUT))
|
||||
(void)rbtree_delete(ev->ev_base->times, &ev->node);
|
||||
if((ev->ev_events&(EV_READ|EV_WRITE)) && ev->ev_fd != -1) {
|
||||
log_assert(ev->ev_base->max > 0);
|
||||
/* remove item and compact the list */
|
||||
ev->ev_base->items[ev->idx] =
|
||||
ev->ev_base->items[ev->ev_base->max-1];
|
||||
ev->ev_base->items[ev->ev_base->max-1] = NULL;
|
||||
ev->ev_base->max--;
|
||||
if(ev->idx < ev->ev_base->max)
|
||||
ev->ev_base->items[ev->idx]->idx = ev->idx;
|
||||
|
||||
if(WSAEventSelect(ev->ev_fd, ev->hEvent, 0) != 0)
|
||||
log_err("WSAEventSelect(disable) failed: %s",
|
||||
wsa_strerror(WSAGetLastError()));
|
||||
|
|
|
|||
Loading…
Reference in a new issue