r2722 - trunk/varnish-cache/bin/varnishd
phk at projects.linpro.no
phk at projects.linpro.no
Tue Jun 17 11:37:45 CEST 2008
Author: phk
Date: 2008-06-17 11:37:44 +0200 (Tue, 17 Jun 2008)
New Revision: 2722
Modified:
trunk/varnish-cache/bin/varnishd/mgt_event.c
Log:
Fix broken logic in the poll-fd compaction function, which resulted in
a panic during this sequence:
varnishd -d -d -T :8082
ctrl-D
telnet localhost 8082 (from other terminal)
Modified: trunk/varnish-cache/bin/varnishd/mgt_event.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/mgt_event.c 2008-06-17 09:21:58 UTC (rev 2721)
+++ trunk/varnish-cache/bin/varnishd/mgt_event.c 2008-06-17 09:37:44 UTC (rev 2722)
@@ -373,23 +373,26 @@
unsigned u;
struct pollfd *p;
struct ev *ep;
+ int lfd;
+ DBG(evb, "compact_pfd() lpfd = %d\n", evb->lpfd);
p = evb->pfd;
- ep = VTAILQ_FIRST(&evb->events);
for (u = 0; u < evb->lpfd; u++, p++) {
+ DBG(evb, "...[%d] fd = %d\n", u, p->fd);
if (p->fd >= 0)
continue;
- for(; ep != NULL; ep = VTAILQ_NEXT(ep, __list)) {
- if (ep->fd >= 0 && ep->__poll_idx > u)
+ lfd = evb->pfd[evb->lpfd - 1].fd;
+ VTAILQ_FOREACH(ep, &evb->events, __list)
+ if (ep->fd == lfd)
break;
- }
- if (ep == NULL)
- break;
- *p = evb->pfd[ep->__poll_idx];
+ AN(ep);
+ DBG(evb, "...[%d] move %p pidx %d\n", u, ep, ep->__poll_idx);
+ *p = evb->pfd[--evb->lpfd];
ep->__poll_idx = u;
}
evb->lpfd = u;
evb->compact_pfd = 0;
+ DBG(evb, "... lpfd = %d\n", evb->lpfd);
}
/*--------------------------------------------------------------------*/
More information about the varnish-commit
mailing list