From 46c11403a3121a6cbaac4a9a98ecd5d89e9761c5 Mon Sep 17 00:00:00 2001 From: phk Date: Sat, 5 Aug 2006 08:49:54 +0000 Subject: [PATCH] bugfixes git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@646 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/mgt_event.c | 13 +++++++++---- varnish-cache/bin/varnishd/mgt_event.h | 2 ++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/varnish-cache/bin/varnishd/mgt_event.c b/varnish-cache/bin/varnishd/mgt_event.c index 4de2788a..6f8581fd 100644 --- a/varnish-cache/bin/varnishd/mgt_event.c +++ b/varnish-cache/bin/varnishd/mgt_event.c @@ -138,7 +138,8 @@ ev_add(struct evbase *evb, struct ev *e) e->flags & (EV_RD|EV_WR|EV_ERR|EV_HUP); e->__poll_idx = evb->lpfd; evb->lpfd++; - } + } else + e->__poll_idx = -1; if (e->timeout != 0.0) { e->__when += ev_now() + e->timeout; @@ -151,7 +152,6 @@ ev_add(struct evbase *evb, struct ev *e) e->__evb = evb; e->__binheap_idx = 0; e->__privflags = 0; - e->__poll_idx = -1; if (e->fd < 0) TAILQ_INSERT_TAIL(&evb->events, e, __list); else @@ -196,7 +196,7 @@ ev_schedule(struct evbase *evb) CHECK_OBJ_NOTNULL(evb, EVBASE_MAGIC); do - i = ev_schedule(evb); + i = ev_schedule_one(evb); while (i == 1); return (i); } @@ -220,6 +220,7 @@ ev_sched_timeout(struct evbase *evb, struct ev *e, double t) i = e->callback(e, 0); if (i) { ev_del(evb, e); + free(e); } else { e->__when += t + e->timeout; binheap_delete(evb->binheap, 0); @@ -273,7 +274,9 @@ ev_schedule_one(struct evbase *evb) assert(pfd->events == e->flags); if (!pfd->revents) continue; +printf("Call %p %s (%u)\n", e, e->name, pfd->revents); j = e->callback(e, pfd->revents); +printf("Back from %p %s (%u)\n", e, e->name, pfd->revents); i--; if (evb->disturbed) { TAILQ_FOREACH(e2, &evb->events, __list) @@ -283,8 +286,10 @@ ev_schedule_one(struct evbase *evb) e2 = TAILQ_NEXT(e, __list); evb->disturbed = 0; } - if (j) + if (j) { ev_del(evb, e); + free(e); + } } return (1); } diff --git a/varnish-cache/bin/varnishd/mgt_event.h b/varnish-cache/bin/varnishd/mgt_event.h index a7989fc0..5ac5323b 100644 --- a/varnish-cache/bin/varnishd/mgt_event.h +++ b/varnish-cache/bin/varnishd/mgt_event.h @@ -1,4 +1,5 @@ +#include #include "queue.h" struct ev; @@ -11,6 +12,7 @@ struct ev { #define EV_MAGIC 0x15c8134b /* pub */ + const char *name; int fd; unsigned flags; #define EV_RD POLLIN -- 2.39.5