static void bev_async_consider_reading(struct bufferevent_async *b) { size_t cur_size; size_t read_high; size_t at_most; /* Don't read if there is a read in progress, or we do not * want to read. */ if (b->read_in_progress || !(b->bev.bev.enabled&EV_READ)) return; /* Don't read if we're full */ cur_size = evbuffer_get_length(b->bev.bev.input); read_high = b->bev.bev.wm_read.high; if (read_high) { if (cur_size >= read_high) return; at_most = read_high - cur_size; } else { at_most = 16384; /* FIXME totally magic. */ } if (evbuffer_launch_read(b->bev.bev.input, at_most)) { EVUTIL_ASSERT(0); } else { b->read_in_progress = 1; } }
static void bev_async_consider_reading(struct bufferevent_async *beva) { size_t cur_size; size_t read_high; size_t at_most; int limit; struct bufferevent *bev = &beva->bev.bev; /* Don't read if there is a read in progress, or we do not * want to read. */ if (beva->read_in_progress || beva->bev.connecting) return; if (!beva->ok || !(bev->enabled&EV_READ)) { bev_async_del_read(beva); return; } /* Don't read if we're full */ cur_size = evbuffer_get_length(bev->input); read_high = bev->wm_read.high; if (read_high) { if (cur_size >= read_high) { bev_async_del_read(beva); return; } at_most = read_high - cur_size; } else { at_most = 16384; /* FIXME totally magic. */ } /* XXXX This over-commits. */ /* XXXX see also not above on cast on _bufferevent_get_write_max() */ limit = (int)_bufferevent_get_read_max(&beva->bev); if (at_most >= (size_t)limit && limit >= 0) at_most = limit; if (beva->bev.read_suspended) { bev_async_del_read(beva); return; } bufferevent_incref(bev); if (evbuffer_launch_read(bev->input, at_most, &beva->read_overlapped)) { beva->ok = 0; _bufferevent_run_eventcb(bev, BEV_EVENT_ERROR); bufferevent_decref(bev); } else { beva->read_in_progress = at_most; _bufferevent_decrement_read_buckets(&beva->bev, at_most); bev_async_add_read(beva); } return; }
static void bev_async_consider_reading(struct bufferevent_async *b) { size_t cur_size; size_t read_high; size_t at_most; int limit; /* Don't read if there is a read in progress, or we do not * want to read. */ if (!b->ok || b->read_in_progress || !(b->bev.bev.enabled&EV_READ)) return; /* Don't read if we're full */ cur_size = evbuffer_get_length(b->bev.bev.input); read_high = b->bev.bev.wm_read.high; if (read_high) { if (cur_size >= read_high) return; at_most = read_high - cur_size; } else { at_most = 16384; /* FIXME totally magic. */ } /* XXXX This over-commits. */ limit = _bufferevent_get_read_max(&b->bev); if (at_most >= limit) at_most = limit; if (b->bev.read_suspended) return; if (evbuffer_launch_read(b->bev.bev.input, at_most, &b->read_overlapped)) { EVUTIL_ASSERT(0); } else { b->read_in_progress = 1; } }