I don't know. I did the debugging on this about 3 weeks ago and my
cache is very cold at the moment.

Shouldn't bufferevent_disable_hard_(bufev, EV_READ|EV_WRITE) have
cleared any fd out of the evmap and epoll?

Looking at be_socket_disable:

if (event & EV_READ) {
  if (event_del(&bufev->ev_read) == -1)
    return -1;
}
/* Don't actually disable the write if we are trying to connect. */
if ((event & EV_WRITE) && ! bufev_p->connecting) {
  if (event_del(&bufev->ev_write) == -1)
    return -1;
}

In particular the '&& !connecting' part. Seems related to the
occurrence of these on fds that time out.

On Tue, Feb 19, 2013 at 4:30 PM, Catalin Patulea <catal...@google.com> wrote:
> On Tue, Feb 19, 2013 at 4:17 PM, Nick Mathewson <ni...@freehaven.net> wrote:
>> But the patch isn't quite optimal for that -- we should do the
>> bufferevent_setfd() before we close the socket, not after.  That way
>> there's never a non-deleted event that refers to the fd.
> The idea with doing the setfd there was in the case where evcon->fd ==
> -1 but the bufferevent has an fd.
>
> Why is there a copy of the fd in evcon? Why not use
> bufferevent_getfd(evcon->bufev)?
>
>> How does the attached patch look to you? Does it work as well/any better?
> I'll see about canarying it and will reply once it's been running for a while.
***********************************************************************
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-users    in the body.

Reply via email to