summaryrefslogtreecommitdiff
path: root/bufferevent.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-08-28 14:51:36 -0400
committerNick Mathewson <nickm@torproject.org>2011-08-28 14:51:36 -0400
commit904254f975b260b2a00b299a01db26b4f81407a3 (patch)
tree7d73ca8a5ae43dcd8c131366f955f0eec0fad1be /bufferevent.c
parent6d2613beccc34050b615ffbedc4196d457b46597 (diff)
parente6af35d762822e56e97cca3708ffee291c867d20 (diff)
downloadlibevent-904254f975b260b2a00b299a01db26b4f81407a3.tar.gz
Merge remote-tracking branch 'origin/patches-2.0'
Diffstat (limited to 'bufferevent.c')
-rw-r--r--bufferevent.c15
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)
{