diff options
author | Nick Mathewson <nickm@torproject.org> | 2010-10-08 00:59:02 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2010-10-14 10:55:04 -0400 |
commit | ac27eb827655b344a08207bf92a0c25da94ac7eb (patch) | |
tree | 832118570254f7f5555da3fa2b2d7ae87d2ea128 /bufferevent.c | |
parent | 34d64f8a347147aa5a6ac222f302e12b142a8f2e (diff) | |
download | libevent-ac27eb827655b344a08207bf92a0c25da94ac7eb.tar.gz |
Correct logic on disabling underlying bufferevents when disabling a filter
Previously, whenever writing was disabled on a bufferevent_filter (or
a filtering SSL bufferevent), we would stop writing on the underlying
bufferevent. This would make for trouble, though, since if you
implemented common patterns like "stop writing once data X has been
flushed", your bufferevent filter would disable the underlying
bufferevent after the data was flushed to the underlying bufferevent,
but before actually having it written to the network.
Now, we have filters leave their underlying bufferevents enabled for
reading and writing for reading and writing immediately. They are not
disabled, unless the user wants to disable them, which is now allowed.
To handle the case where we want to choke reading on the underlying
bufferevent because the filter no longer wants to read, we use
bufferevent_suspend_read(). This is analogous to the way that we use
bufferevent_suspend_write() to suspend writing on a filtering
bufferevent when the underlying bufferevent's output buffer has hit
its high watermark.
Diffstat (limited to 'bufferevent.c')
-rw-r--r-- | bufferevent.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/bufferevent.c b/bufferevent.c index 2ae42fba..e5369ece 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -60,7 +60,7 @@ #include "util-internal.h" void -bufferevent_suspend_read(struct bufferevent *bufev, short what) +bufferevent_suspend_read(struct bufferevent *bufev, bufferevent_suspend_flags what) { struct bufferevent_private *bufev_private = EVUTIL_UPCAST(bufev, struct bufferevent_private, bev); @@ -72,7 +72,7 @@ bufferevent_suspend_read(struct bufferevent *bufev, short what) } void -bufferevent_unsuspend_read(struct bufferevent *bufev, short what) +bufferevent_unsuspend_read(struct bufferevent *bufev, bufferevent_suspend_flags what) { struct bufferevent_private *bufev_private = EVUTIL_UPCAST(bufev, struct bufferevent_private, bev); @@ -84,7 +84,7 @@ bufferevent_unsuspend_read(struct bufferevent *bufev, short what) } void -bufferevent_suspend_write(struct bufferevent *bufev, short what) +bufferevent_suspend_write(struct bufferevent *bufev, bufferevent_suspend_flags what) { struct bufferevent_private *bufev_private = EVUTIL_UPCAST(bufev, struct bufferevent_private, bev); @@ -96,7 +96,7 @@ bufferevent_suspend_write(struct bufferevent *bufev, short what) } void -bufferevent_unsuspend_write(struct bufferevent *bufev, short what) +bufferevent_unsuspend_write(struct bufferevent *bufev, bufferevent_suspend_flags what) { struct bufferevent_private *bufev_private = EVUTIL_UPCAST(bufev, struct bufferevent_private, bev); |