diff options
Diffstat (limited to 'bufferevent.c')
-rw-r--r-- | bufferevent.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/bufferevent.c b/bufferevent.c index fd95941b..5f424d7e 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -272,14 +272,15 @@ bufferevent_trigger(struct bufferevent *bufev, short iotype, int options) } void -bufferevent_run_eventcb_(struct bufferevent *bufev, short what) +bufferevent_run_eventcb_(struct bufferevent *bufev, short what, int options) { /* Requires that we hold the lock and a reference */ struct bufferevent_private *p = EVUTIL_UPCAST(bufev, struct bufferevent_private, bev); if (bufev->errorcb == NULL) return; - if (p->options & BEV_OPT_DEFER_CALLBACKS) { + if ((p->options & BEV_OPT_DEFER_CALLBACKS) || + (options & BEV_TRIG_DEFER_CALLBACKS)) { p->eventcb_pending |= what; p->errno_pending = EVUTIL_SOCKET_ERROR(); SCHEDULE_DEFERRED(p); @@ -288,6 +289,14 @@ bufferevent_run_eventcb_(struct bufferevent *bufev, short what) } } +void +bufferevent_trigger_event(struct bufferevent *bufev, short what, int options) +{ + bufferevent_incref_and_lock_(bufev); + bufferevent_run_eventcb_(bufev, what, options); + bufferevent_decref_and_unlock_(bufev); +} + int bufferevent_init_common_(struct bufferevent_private *bufev_private, struct event_base *base, @@ -914,7 +923,7 @@ bufferevent_generic_read_timeout_cb(evutil_socket_t fd, short event, void *ctx) struct bufferevent *bev = ctx; bufferevent_incref_and_lock_(bev); bufferevent_disable(bev, EV_READ); - bufferevent_run_eventcb_(bev, BEV_EVENT_TIMEOUT|BEV_EVENT_READING); + bufferevent_run_eventcb_(bev, BEV_EVENT_TIMEOUT|BEV_EVENT_READING, 0); bufferevent_decref_and_unlock_(bev); } static void @@ -923,7 +932,7 @@ bufferevent_generic_write_timeout_cb(evutil_socket_t fd, short event, void *ctx) struct bufferevent *bev = ctx; bufferevent_incref_and_lock_(bev); bufferevent_disable(bev, EV_WRITE); - bufferevent_run_eventcb_(bev, BEV_EVENT_TIMEOUT|BEV_EVENT_WRITING); + bufferevent_run_eventcb_(bev, BEV_EVENT_TIMEOUT|BEV_EVENT_WRITING, 0); bufferevent_decref_and_unlock_(bev); } |