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
>
>

Reply via email to