]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
more capacity for winsock handler.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 17 Apr 2009 08:35:15 +0000 (08:35 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 17 Apr 2009 08:35:15 +0000 (08:35 +0000)
git-svn-id: file:///svn/unbound/trunk@1604 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
util/config_file.c
util/winsock_event.c

index 7333cd37584b69fcf7c05012b97db2f9c2331576..d2fbb0a7c9807597948ace22fc96e49b69c5595c 100644 (file)
@@ -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
index 97a9e230c41b966acf168abaccaeecf0fa8ef7aa..657c353fc585a6e0c38598e7f3b4d3fd4aff5dec 100644 (file)
@@ -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;
index 55cc2314350e3cc41b0b233166d1d5a6ddbbefab..bc214863fbbb1808919a1557aca6a3e088690c06 100644 (file)
@@ -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()));