even though it is not used, and will return EFAULT if one is not provided.
Also, instead of silently accepting EBADF from epoll_ctl(), check that
sp->fd != -1 before calling vca_del(). This can happen in some cases
where vca_pollsession() closes the session before returning. This way,
we will still get an assertion failure if epoll_ctl() fails for some
other (unexpected) reason.
Thanks to airmax for his assistance in tracking this down.
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1143
d4fa192b-c00b-0410-8231-
f00ffab90ce4
static void
vca_del(int fd)
{
- int i;
-
- i = epoll_ctl(epfd, EPOLL_CTL_DEL, fd, NULL);
- assert(i == 0 || errno == EBADF);
+ struct epoll_event ev = { 0, { 0 } };
+ AZ(epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &ev));
}
static void
i = vca_pollsession(sp);
if (i >= 0) {
TAILQ_REMOVE(&sesshead, sp, list);
- vca_del(sp->fd);
+ if (sp->fd != -1)
+ vca_del(sp->fd);
if (i == 0)
vca_handover(sp, i);
else