summaryrefslogtreecommitdiff
path: root/bufferevent.c
diff options
context:
space:
mode:
authorOndřej Kuzník <ondra@mistotebe.net>2013-12-03 23:01:54 +0000
committerOndřej Kuzník <ondra@mistotebe.net>2013-12-03 23:39:13 +0000
commita7384c782486c293e9cb8c22916eb9ee842a8c1c (patch)
treef7ff2ca23db967481b1d18a68ae9bdacba59e533 /bufferevent.c
parent61ee18b8b1d2ac0025955b3f949531c712fb7527 (diff)
downloadlibevent-a7384c782486c293e9cb8c22916eb9ee842a8c1c.tar.gz
Add an option to trigger bufferevent event callbacks
Diffstat (limited to 'bufferevent.c')
-rw-r--r--bufferevent.c17
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);
}