]> granicus.if.org Git - libevent/commitdiff
Make bufferevent_trigger_nolock_() inline
authorNick Mathewson <nickm@torproject.org>
Tue, 24 Dec 2013 16:20:52 +0000 (11:20 -0500)
committerNick Mathewson <nickm@torproject.org>
Tue, 24 Dec 2013 16:20:52 +0000 (11:20 -0500)
Since most of its callers are using constant EV_READ or EV_WRITE, and
using constant 0 as its argument, this should eliminate most of the
overhead for this function in the fast case.

bufferevent-internal.h
bufferevent.c

index 70b25cd90464006aab8a4b8a9ce8c082bbbc1940..f85f376e03fc394059255c242b9f9fc3ee7e7931 100644 (file)
@@ -354,8 +354,21 @@ void bufferevent_run_eventcb_(struct bufferevent *bufev, short what, int options
  * BEV_TRIG_DEFER_CALLBACKS) I/O callbacks specified in iotype.
  * Must already hold the bufev lock. Honors watermarks unless
  * BEV_TRIG_IGNORE_WATERMARKS is in options. */
-void bufferevent_trigger_nolock_(struct bufferevent *bufev, short iotype, int options);
-
+static inline void bufferevent_trigger_nolock_(struct bufferevent *bufev, short iotype, int options);
+
+/* Making this inline since all of the common-case calls to this function in
+ * libevent use constant arguments. */
+size_t evbuffer_get_length(const struct evbuffer *buf);
+static inline void
+bufferevent_trigger_nolock_(struct bufferevent *bufev, short iotype, int options)
+{
+       if ((iotype & EV_READ) && ((options & BEV_TRIG_IGNORE_WATERMARKS) ||
+           evbuffer_get_length(bufev->input) >= bufev->wm_read.low))
+               bufferevent_run_readcb_(bufev, options);
+       if ((iotype & EV_WRITE) && ((options & BEV_TRIG_IGNORE_WATERMARKS) ||
+           evbuffer_get_length(bufev->output) <= bufev->wm_write.low))
+               bufferevent_run_writecb_(bufev, options);
+}
 
 /** Internal: Add the event 'ev' with timeout tv, unless tv is set to 0, in
  * which case add ev with no timeout. */
index d8c84da4caf4f9e85705900ce8ca46d6235b74db..194133699436bd6b0ff70cdc5a4b34ba7bd3eaa2 100644 (file)
@@ -252,17 +252,6 @@ bufferevent_run_writecb_(struct bufferevent *bufev, int options)
        }
 }
 
-void
-bufferevent_trigger_nolock_(struct bufferevent *bufev, short iotype, int options)
-{
-       if ((iotype & EV_READ) && ((options & BEV_TRIG_IGNORE_WATERMARKS) ||
-           evbuffer_get_length(bufev->input) >= bufev->wm_read.low))
-               bufferevent_run_readcb_(bufev, options);
-       if ((iotype & EV_WRITE) && ((options & BEV_TRIG_IGNORE_WATERMARKS) ||
-           evbuffer_get_length(bufev->output) <= bufev->wm_write.low))
-               bufferevent_run_writecb_(bufev, options);
-}
-
 void
 bufferevent_trigger(struct bufferevent *bufev, short iotype, int options)
 {