diff options
author | Nick Mathewson <nickm@torproject.org> | 2011-08-28 14:51:36 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2011-08-28 14:51:36 -0400 |
commit | 904254f975b260b2a00b299a01db26b4f81407a3 (patch) | |
tree | 7d73ca8a5ae43dcd8c131366f955f0eec0fad1be /bufferevent.c | |
parent | 6d2613beccc34050b615ffbedc4196d457b46597 (diff) | |
parent | e6af35d762822e56e97cca3708ffee291c867d20 (diff) | |
download | libevent-904254f975b260b2a00b299a01db26b4f81407a3.tar.gz |
Merge remote-tracking branch 'origin/patches-2.0'
Diffstat (limited to 'bufferevent.c')
-rw-r--r-- | bufferevent.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/bufferevent.c b/bufferevent.c index 1c064e53..3a991860 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -60,6 +60,9 @@ #include "evbuffer-internal.h" #include "util-internal.h" +static void _bufferevent_cancel_all(struct bufferevent *bev); + + void bufferevent_suspend_read(struct bufferevent *bufev, bufferevent_suspend_flags what) { @@ -675,6 +678,7 @@ bufferevent_free(struct bufferevent *bufev) { BEV_LOCK(bufev); bufferevent_setcb(bufev, NULL, NULL, NULL, NULL); + _bufferevent_cancel_all(bufev); _bufferevent_decref_and_unlock(bufev); } @@ -751,6 +755,17 @@ bufferevent_getfd(struct bufferevent *bev) return (res<0) ? -1 : d.fd; } +static void +_bufferevent_cancel_all(struct bufferevent *bev) +{ + union bufferevent_ctrl_data d; + memset(&d, 0, sizeof(d)); + BEV_LOCK(bev); + if (bev->be_ops->ctrl) + bev->be_ops->ctrl(bev, BEV_CTRL_CANCEL_ALL, &d); + BEV_UNLOCK(bev); +} + short bufferevent_get_enabled(struct bufferevent *bufev) { |