int ioevent_remove(IOEventPoller *ioevent, void *data) { IOEventEntry *pEntry; int index; if (ioevent->iterator.index >= ioevent->iterator.count) { return ENOENT; } pEntry = (IOEventEntry *)IOEVENT_GET_DATA(ioevent, ioevent->iterator.index); if (pEntry != NULL && pEntry->timer.data == data) { return 0; //do NOT clear current entry } for (index=ioevent->iterator.index + 1; index < ioevent->iterator.count; index++) { pEntry = (IOEventEntry *)IOEVENT_GET_DATA(ioevent, index); if (pEntry != NULL && pEntry->timer.data == data) { logDebug("file: "__FILE__", line: %d, " "clear iovent data: %p", __LINE__, data); IOEVENT_CLEAR_DATA(ioevent, index); return 0; } } return ENOENT; }
static void deal_ioevents(IOEventPoller *ioevent, const int count) { int i; int event; IOEventEntry *pEntry; for (i=0; i<count; i++) { event = IOEVENT_GET_EVENTS(ioevent, i); pEntry = (IOEventEntry *)IOEVENT_GET_DATA(ioevent, i); pEntry->callback(pEntry->fd, event, pEntry->timer.data); } }
static void deal_ioevents(IOEventPoller *ioevent) { int event; IOEventEntry *pEntry; for (ioevent->iterator.index=0; ioevent->iterator.index < ioevent->iterator. count; ioevent->iterator.index++) { event = IOEVENT_GET_EVENTS(ioevent, ioevent->iterator.index); pEntry = (IOEventEntry *)IOEVENT_GET_DATA(ioevent, ioevent->iterator.index); if (pEntry != NULL) { pEntry->callback(pEntry->fd, event, pEntry->timer.data); } else { logDebug("file: "__FILE__", line: %d, " "ignore iovent : %d, index: %d", __LINE__, event, ioevent->iterator.index); } } }