Exemplo n.º 1
0
void ae_delete_file_event(ae_event_loop * ev_loop, int fd, int mask)
{
	if (fd >= ev_loop->setsize) return;
	ae_file_event * fe = &ev_loop->events[fd];

	if (fe->mask == AE_NONE) return;
	fe->mask &= (~mask);

	// Maybe fd still has a readable or writable event
	if (fd == ev_loop->maxfd && fe->mask == AE_NONE) {
		int j;
		// Update maxfd
		for (j = ev_loop->maxfd - 1; j >= 0; j--) {
			if (ev_loop->events[fd].mask != AE_NONE) {
				break;
			}
		}

		ev_loop->maxfd = j;
	}
	
	ae_api_del_event(ev_loop, fd, mask);
}
Exemplo n.º 2
0
Arquivo: ae.c Projeto: flygoast/verben
/* Unregister a file event */
void ae_delete_file_event(ae_event_loop *el, int fd, int mask) {
    if (fd >= AE_SETSIZE) {
        return;
    }

    ae_file_event *fe = &el->events[fd];
    if (fe->mask == AE_NONE) {
        return;
    }
    fe->mask = fe->mask & (~mask);
    if (fd == el->maxfd && fe->mask == AE_NONE) {
        /* All the events on the fd were deleted, update the max fd. */
        int j;
        for (j = el->maxfd - 1; j >= 0; --j) {
            if (el->events[j].mask != AE_NONE) {
                break;
            }
        }
        /* If all the file events on all fds deleted, max fd will get
           back to -1. */
        el->maxfd = j;
    }
    ae_api_del_event(el, fd, mask);
}