]> granicus.if.org Git - libevent/commitdiff
regress_ssl: fix ssl/bufferevent_wm_filter for non defered callbacks
authorAzat Khuzhin <a3at.mail@gmail.com>
Wed, 7 Nov 2018 21:36:07 +0000 (00:36 +0300)
committerAzat Khuzhin <a3at.mail@gmail.com>
Wed, 7 Nov 2018 21:46:13 +0000 (00:46 +0300)
Even after referenced patch there is still possible recursive callbacks
from evbuffer_drain(bev_input), i.e.:
  wm_transfer() -> evbuffer_drain() -> wm_transfer()
                   inc(ctx->get)

But if we will increment ctx->get before drain that we will not add more
data to buffer.

Refs: 54c6fe3c ("regress_ssl: make ssl/bufferevent_wm_filter more fault-tolerance")
CI: https://ci.appveyor.com/project/nmathewson/libevent/build/job/f0rv299i71wnuxdq#L2546

test/regress_ssl.c

index 88010a92ad691dc271410da15aab2774adaa25d0..45ce540d2d8ae85d51d2a686084a97f3f4ff8f8e 100644 (file)
@@ -822,8 +822,8 @@ wm_transfer(struct bufferevent *bev, void *arg)
                bufferevent_setcb(bev, NULL, NULL, NULL, NULL);
                bufferevent_disable(bev, EV_READ);
        } else {
-               evbuffer_drain(in, drain);
                ctx->get += drain;
+               evbuffer_drain(in, drain);
        }
 
        TT_BLATHER(("wm_transfer-%s(%p): "