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 {
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 {
}
}
+#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);
}
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);
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);
}
*/
enum bufferevent_trigger_options {
/** trigger the callback regardless of the watermarks */
- BEV_TRIG_IGNORE_WATERMARKS = (1<<0),
+ BEV_TRIG_IGNORE_WATERMARKS = (1<<16),
/** defer even if the callbacks are not */
- BEV_TRIG_DEFER_CALLBACKS = (1<<1),
+ BEV_TRIG_DEFER_CALLBACKS = BEV_OPT_DEFER_CALLBACKS,
+
+ /* (Note: for internal reasons, these need to be disjoint from
+ * bufferevent_options, except when they mean the same thing. */
};
/**