uv_print_all_handles(uvloop, stderr);
uv_library_shutdown();
}
-static void add_impl(int i)
-{
- struct polldata *poll = uvalloc::get();
- memmove(uvpoll+i+1, uvpoll+i, sizeof(uvpoll[0])*(nfds-1-i));
- uvpoll[i] = poll;
- poll->events = 0;
- poll->revents = 0;
- poll->fd = fds[i].fd;
- poll->dead = 0;
- uv_poll_init_socket(uvloop, &poll->uv, fds[i].fd);
- if (lastptr >= i)
- lastptr++;
-}
-static void del_impl(int i)
-{
- struct polldata *poll = uvpoll[i];
- memmove(uvpoll+i, uvpoll+i+1, sizeof(uvpoll[0])*(nfds-(i+1)));
- uv_close((uv_handle_t *)&poll->uv, [](uv_handle_t *handle){
- struct polldata *p = container_of(handle, struct polldata, uv);
- closesocket(p->fd);
- uvalloc::put(p);
- });
- if (lastptr > i)
- lastptr--;
-}
static void cb(uv_poll_t *handle, int status, int events)
{
struct polldata *poll = container_of(handle, struct polldata, uv);
int i = search(fd, true);
fds[i].assoc = assoc;
fds[i].type = type;
- add_impl(i);
+ struct polldata *poll = uvalloc::get();
+ memmove(uvpoll+i+1, uvpoll+i, sizeof(uvpoll[0])*(nfds-1-i));
+ uvpoll[i] = poll;
+ poll->events = 0;
+ poll->revents = 0;
+ poll->fd = fds[i].fd;
+ poll->dead = 0;
+ uv_poll_init_socket(uvloop, &poll->uv, fds[i].fd);
+ if (lastptr >= i)
+ lastptr++;
}
void del_and_close(SOCKET fd)
{
int i = search(fd, false);
uvpoll[i]->events = 0;
- del_impl(i);
+ struct polldata *poll = uvpoll[i];
+ memmove(uvpoll+i, uvpoll+i+1, sizeof(uvpoll[0])*(nfds-(i+1)));
+ uv_close((uv_handle_t *)&poll->uv, [](uv_handle_t *handle){
+ struct polldata *p = container_of(handle, struct polldata, uv);
+ closesocket(p->fd);
+ uvalloc::put(p);
+ });
+ if (lastptr > i)
+ lastptr--;
memmove(fds+i, fds+i+1, sizeof(fds[0])*(nfds-(i+1)));
nfds--;
}