Yes, but it may be this weekend before I can get to it. On Fri, Jul 24, 2015 at 1:30 AM, Mark Ellzey <[email protected]> wrote:
> Can put this up as a pull request on github to review and accept > > On Thu, Jul 23, 2015 at 6:56 PM Bill Vaughan <[email protected]> > wrote: > >> Hi all, >> >> I added bufferevent pairs to my project a few weeks ago as it was perfect >> for what I needed. Got it all working nicely but valgrind was reporting a >> leak. I finally tracked down the culprit to the bufferevent pair flush >> code. >> >> Here is the patch for libevent 2.0.22. The lock was being taken and not >> released if the mode was BEV_NORMAL. >> >> [bvaughan@dev-client tproxy]$ git diff >> diff --git a/libevent-2.0.22-stable/bufferevent_pair.c >> b/libevent-2.0.22-stable/bufferevent_pair.c >> index e9ed9f5..2a77dc7 100644 >> --- a/libevent-2.0.22-stable/bufferevent_pair.c >> +++ b/libevent-2.0.22-stable/bufferevent_pair.c >> @@ -284,14 +284,15 @@ be_pair_flush(struct bufferevent *bev, short iotype, >> { >> struct bufferevent_pair *bev_p = upcast(bev); >> struct bufferevent *partner; >> - incref_and_lock(bev); >> + >> if (!bev_p->partner) >> return -1; >> >> - partner = downcast(bev_p->partner); >> + if (mode == BEV_NORMAL) >> + return 0; >> >> - if (mode == BEV_NORMAL) >> - return 0; >> + incref_and_lock(bev); >> + partner = downcast(bev_p->partner); >> >> if ((iotype & EV_READ) != 0) >> be_pair_transfer(partner, bev, 1); >> >> >> Thanks, >> -Bill >> >>
