This lets us use less RAM for the evmap_io structure, which in turn
can let us have fewer cache misses for evmap operations.
*/
struct evmap_io {
struct event_list events;
- unsigned int nread;
- unsigned int nwrite;
+ ev_uint16_t nread;
+ ev_uint16_t nwrite;
};
/* An entry for an evmap_signal list: notes all the events that want to know
if (++nwrite == 1)
res |= EV_WRITE;
}
+ if (EVUTIL_UNLIKELY(nread > 0xffff || nwrite > 0xffff)) {
+ event_warnx("Too many events reading or writing on fd %d",
+ (int)fd);
+ return -1;
+ }
if (res) {
void *extra = ((char*)ctx) + sizeof(struct evmap_io);
retval = 1;
}
- ctx->nread = nread;
- ctx->nwrite = nwrite;
+ ctx->nread = (ev_uint16_t) nread;
+ ctx->nwrite = (ev_uint16_t) nwrite;
TAILQ_INSERT_TAIL(&ctx->events, ev, ev_io_next);
return (retval);