/* Requires that we hold the lock and a reference */
struct bufferevent_private *p =
EVUTIL_UPCAST(bufev, struct bufferevent_private, bev);
+ if (bufev->readcb == NULL)
+ return;
if (p->options & BEV_OPT_DEFER_CALLBACKS) {
p->readcb_pending = 1;
if (!p->deferred.queued) {
/* Requires that we hold the lock and a reference */
struct bufferevent_private *p =
EVUTIL_UPCAST(bufev, struct bufferevent_private, bev);
+ if (bufev->writecb == NULL)
+ return;
if (p->options & BEV_OPT_DEFER_CALLBACKS) {
p->writecb_pending = 1;
if (!p->deferred.queued) {
/* 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) {
p->eventcb_pending |= what;
p->errno_pending = EVUTIL_SOCKET_ERROR();
if (ok && nbytes) {
BEV_RESET_GENERIC_READ_TIMEOUT(bev);
- if (bev->readcb != NULL &&
- evbuffer_get_length(bev->input) >= bev->wm_read.low)
+ if (evbuffer_get_length(bev->input) >= bev->wm_read.low)
_bufferevent_run_readcb(bev);
bev_async_consider_reading(bev_a);
} else if (!ok) {
if (ok && nbytes) {
BEV_RESET_GENERIC_WRITE_TIMEOUT(bev);
- if (bev->writecb != NULL &&
- evbuffer_get_length(bev->output) <= bev->wm_write.low)
+ if (evbuffer_get_length(bev->output) <= bev->wm_write.low)
_bufferevent_run_writecb(bev);
bev_async_consider_writing(bev_a);
} else if (!ok) {
/* Or if we have filled the underlying output buffer. */
!be_underlying_writebuf_full(bevf,state));
- if (processed && bufev->writecb &&
+ if (processed &&
evbuffer_get_length(bufev->output) <= bufev->wm_write.low) {
/* call the write callback.*/
_bufferevent_run_writecb(bufev);
* other places that can call process-input, and they should
* force readcb calls as needed. */
if (processed_any &&
- evbuffer_get_length(bufev->input) >= bufev->wm_read.low &&
- bufev->readcb != NULL)
+ evbuffer_get_length(bufev->input) >= bufev->wm_read.low)
_bufferevent_run_readcb(bufev);
_bufferevent_decref_and_unlock(bufev);
_bufferevent_incref_and_lock(bev);
/* All we can really to is tell our own eventcb. */
- if (bev->errorcb)
- _bufferevent_run_eventcb(bev, what);
+ _bufferevent_run_eventcb(bev, what);
_bufferevent_decref_and_unlock(bev);
}
if (bev_ssl->underlying)
BEV_RESET_GENERIC_READ_TIMEOUT(bev);
- if (evbuffer_get_length(input) >= bev->wm_read.low &&
- bev->readcb)
+ if (evbuffer_get_length(input) >= bev->wm_read.low)
_bufferevent_run_readcb(bev);
}
if (bev_ssl->underlying)
BEV_RESET_GENERIC_WRITE_TIMEOUT(bev);
- if (bev->writecb &&
- evbuffer_get_length(output) <= bev->wm_write.low)
+ if (evbuffer_get_length(output) <= bev->wm_write.low)
_bufferevent_run_writecb(bev);
}
return blocked ? 0 : 1;
src_size = evbuffer_get_length(src->output);
dst_size = evbuffer_get_length(dst->input);
- if (dst_size >= dst->wm_read.low && dst->readcb) {
+ if (dst_size >= dst->wm_read.low) {
_bufferevent_run_readcb(dst);
}
- if (src_size <= src->wm_write.low && src->writecb) {
+ if (src_size <= src->wm_write.low) {
_bufferevent_run_writecb(src);
}
done:
be_pair_transfer(bev, partner, 1);
if (mode == BEV_FINISHED) {
- if (partner->errorcb)
- _bufferevent_run_eventcb(partner, iotype|BEV_EVENT_EOF);
+ _bufferevent_run_eventcb(partner, iotype|BEV_EVENT_EOF);
}
decref_and_unlock(bev);
return 0;
/* Invoke the user callback - must always be called last */
- if (evbuffer_get_length(input) >= bufev->wm_read.low &&
- bufev->readcb != NULL)
+ if (evbuffer_get_length(input) >= bufev->wm_read.low)
_bufferevent_run_readcb(bufev);
goto done;
* Invoke the user callback if our buffer is drained or below the
* low watermark.
*/
- if (bufev->writecb != NULL && (res || !connected) &&
+ if ((res || !connected) &&
evbuffer_get_length(bufev->output) <= bufev->wm_write.low)
_bufferevent_run_writecb(bufev);