X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=fd%2Ffd.c;h=e658c1d0498566282ca45d7a2d5adb4e683f64ea;hb=aa5cb9218724b9d3ee190b9b9c236991b8aca411;hp=b969205456bdbfadf59c8e47c92dc7946e2f8e50;hpb=02b9e09173fbc1c481fb7f9aeff7d268f1af99e9;p=tinc diff --git a/fd/fd.c b/fd/fd.c index b9692054..e658c1d0 100644 --- a/fd/fd.c +++ b/fd/fd.c @@ -34,7 +34,7 @@ static avl_tree_t *fds; volatile bool fd_running = false; int fd_compare(struct fd *a, struct fd *b) { - return (a->fd - b->fd) ?: (a->mode - b->mode); + return a->fd - b->fd; }; bool fd_init(void) { @@ -42,7 +42,7 @@ bool fd_init(void) { FD_ZERO(&readset); FD_ZERO(&writeset); - FD_ZERO(&exceptset); + FD_ZERO(&errorset); fds = avl_tree_new((avl_compare_t)fd_compare, NULL); @@ -79,10 +79,14 @@ bool fd_del(struct fd *fd) { FD_CLR(fd->fd, &writeset); FD_CLR(fd->fd, &errorset); - if(fd->fd >= max_fd) - max_fd = ((struct fd *)fds->tail)->fd; + avl_del(fds, fd); - return avl_del(fds, fd); + if(fds->tail) + max_fd = ((struct fd *)fds->tail->data)->fd; + else + max_fd = 0; + + return true; }; bool fd_mod(struct fd *fd) {