]> err.no Git - varnish/commitdiff
Fix the poll acceptor, we need to cache the fd as sp->fd might
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 6 Sep 2006 18:23:24 +0000 (18:23 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 6 Sep 2006 18:23:24 +0000 (18:23 +0000)
change to -1 under us.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@923 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache_acceptor_poll.c

index d0dcd7a886361734859cb78abaf8d03fde9bd688..8dfea5862059c3ee52ee1e3267c02acd18363717 100644 (file)
@@ -78,7 +78,7 @@ vca_main(void *arg)
        unsigned v;
        struct sess *sp, *sp2;
        struct timespec ts;
-       int i;
+       int i, fd;
 
        (void)arg;
 
@@ -100,13 +100,14 @@ vca_main(void *arg)
                        if (v == 0)
                                break;
                        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
-                       if (pollfd[sp->fd].revents) {
+                       fd = sp->fd;
+                       if (pollfd[fd].revents) {
                                v--;
                                i = vca_pollsession(sp);
                                if (i < 0)
                                        continue;
                                TAILQ_REMOVE(&sesshead, sp, list);
-                               vca_unpoll(sp->fd);
+                               vca_unpoll(fd);
                                if (i == 0)
                                        vca_handover(sp, i);
                                else
@@ -119,7 +120,7 @@ vca_main(void *arg)
                            sp->t_open.tv_nsec > ts.tv_nsec)
                                continue;
                        TAILQ_REMOVE(&sesshead, sp, list);
-                       vca_unpoll(sp->fd);
+                       vca_unpoll(fd);
                        vca_close_session(sp, "timeout");
                        SES_Delete(sp);
                }