diff options
author | Nick Mathewson <nickm@torproject.org> | 2013-12-24 11:30:06 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2013-12-24 11:30:06 -0500 |
commit | a3172a415b709d1df76b27ee86c738e4d8b6f87b (patch) | |
tree | 9573773ae090be17b7db4dab0bc71fb25bd8cadd /bufferevent.c | |
parent | 4dd3abd41fe951b4c236c8e9920f17f3af7f4a6d (diff) | |
download | libevent-a3172a415b709d1df76b27ee86c738e4d8b6f87b.tar.gz |
Minor optimizations on bufferevent_trigger options
By making BEV_TRIG_DEFER_CALLBACKS equal to BEV_OPT_DEFER_CALLBACKS,
and BEV_TRIG_IGNORE_WATERMARKS disjoint from BEV_OPT_*, we can save a
few operations in bufferevent_run_*, which is critical-path.
Diffstat (limited to 'bufferevent.c')
-rw-r--r-- | bufferevent.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/bufferevent.c b/bufferevent.c index 19413369..588461a3 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -226,8 +226,7 @@ bufferevent_run_readcb_(struct bufferevent *bufev, int options) EVUTIL_UPCAST(bufev, struct bufferevent_private, bev); if (bufev->readcb == NULL) return; - if ((p->options & BEV_OPT_DEFER_CALLBACKS) || - (options & BEV_TRIG_DEFER_CALLBACKS)) { + if ((p->options|options) & BEV_OPT_DEFER_CALLBACKS) { p->readcb_pending = 1; SCHEDULE_DEFERRED(p); } else { @@ -243,8 +242,7 @@ bufferevent_run_writecb_(struct bufferevent *bufev, int options) EVUTIL_UPCAST(bufev, struct bufferevent_private, bev); if (bufev->writecb == NULL) return; - if ((p->options & BEV_OPT_DEFER_CALLBACKS) || - (options & BEV_TRIG_DEFER_CALLBACKS)) { + if ((p->options|options) & BEV_OPT_DEFER_CALLBACKS) { p->writecb_pending = 1; SCHEDULE_DEFERRED(p); } else { @@ -252,11 +250,16 @@ bufferevent_run_writecb_(struct bufferevent *bufev, int options) } } +#define BEV_TRIG_ALL_OPTS ( \ + BEV_TRIG_IGNORE_WATERMARKS| \ + BEV_TRIG_DEFER_CALLBACKS \ + ) + void bufferevent_trigger(struct bufferevent *bufev, short iotype, int options) { bufferevent_incref_and_lock_(bufev); - bufferevent_trigger_nolock_(bufev, iotype, options); + bufferevent_trigger_nolock_(bufev, iotype, options&BEV_TRIG_ALL_OPTS); bufferevent_decref_and_unlock_(bufev); } @@ -268,8 +271,7 @@ bufferevent_run_eventcb_(struct bufferevent *bufev, short what, int options) EVUTIL_UPCAST(bufev, struct bufferevent_private, bev); if (bufev->errorcb == NULL) return; - if ((p->options & BEV_OPT_DEFER_CALLBACKS) || - (options & BEV_TRIG_DEFER_CALLBACKS)) { + if ((p->options|options) & BEV_OPT_DEFER_CALLBACKS) { p->eventcb_pending |= what; p->errno_pending = EVUTIL_SOCKET_ERROR(); SCHEDULE_DEFERRED(p); @@ -282,7 +284,7 @@ void bufferevent_trigger_event(struct bufferevent *bufev, short what, int options) { bufferevent_incref_and_lock_(bufev); - bufferevent_run_eventcb_(bufev, what, options); + bufferevent_run_eventcb_(bufev, what, options&BEV_TRIG_ALL_OPTS); bufferevent_decref_and_unlock_(bufev); } |