void//res_t lt_io_remove(base_t *base, event_t *ev)//Position TODO { min_heap_erase_(&base->timeheap, ev);//First erase heap lt_remove_from_readylist(ev, &base->readylist, &base->deletedlist); lt_remove_from_epfd(base->epfd, ev, ev->fd, 0); ev->deleted = 1; // erase from heap // free(ev); //TODO readylist is too long? }
static void test_heap_randomized(void *ptr) { struct min_heap heap; struct event *inserted[1024]; struct event *e, *last_e; int i; min_heap_ctor_(&heap); for (i = 0; i < 1024; ++i) { inserted[i] = malloc(sizeof(struct event)); assert(inserted[i] != NULL); set_random_timeout(inserted[i]); min_heap_push_(&heap, inserted[i]); } check_heap(&heap); tt_assert(min_heap_size_(&heap) == 1024); for (i = 0; i < 512; ++i) { min_heap_erase_(&heap, inserted[i]); if (0 == (i % 32)) check_heap(&heap); } tt_assert(min_heap_size_(&heap) == 512); last_e = min_heap_pop_(&heap); while (1) { e = min_heap_pop_(&heap); if (!e) break; tt_want(evutil_timercmp(&last_e->ev_timeout, &e->ev_timeout, <=)); } tt_assert(min_heap_size_(&heap) == 0); end: for (i = 0; i < 1024; ++i) free(inserted[i]); min_heap_dtor_(&heap); }