in io/fstack-dpdk.cpp [155:177]
int add_interest(Event e) override {
if (e.fd < 0)
LOG_ERROR_RETURN(EINVAL, -1, "invalid file descriptor ", e.fd);
if ((size_t)e.fd >= _inflight_events.size())
_inflight_events.resize(e.fd * 2);
auto& entry = _inflight_events[e.fd];
if (e.interests & entry.interests) {
if (((e.interests & entry.interests & EVENT_READ) &&
(entry.reader_data != e.data)) ||
((e.interests & entry.interests & EVENT_WRITE) &&
(entry.writer_data != e.data)) ||
((e.interests & entry.interests & EVENT_ERROR) &&
(entry.error_data != e.data))) {
LOG_ERROR_RETURN(EALREADY, -1, "conflicted interest(s)");
}
}
entry.interests |= e.interests;
if (e.interests & EVENT_READ) entry.reader_data = e.data;
if (e.interests & EVENT_WRITE) entry.writer_data = e.data;
if (e.interests & EVENT_ERROR) entry.error_data = e.data;
auto events = evmap.translate_bitwisely(e.interests);
return enqueue(e.fd, events, EV_ADD, 0, e.data, true);
}