diff options
Diffstat (limited to 'packages/bun-usockets/src/eventing/epoll_kqueue.c')
-rw-r--r-- | packages/bun-usockets/src/eventing/epoll_kqueue.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/packages/bun-usockets/src/eventing/epoll_kqueue.c b/packages/bun-usockets/src/eventing/epoll_kqueue.c index 44212d3be..d051f5b5a 100644 --- a/packages/bun-usockets/src/eventing/epoll_kqueue.c +++ b/packages/bun-usockets/src/eventing/epoll_kqueue.c @@ -414,14 +414,18 @@ struct us_timer_t *us_create_timer(struct us_loop_t *loop, int fallthrough, unsi #endif #ifdef LIBUS_USE_EPOLL -void us_timer_close(struct us_timer_t *timer) { +void us_timer_close(struct us_timer_t *timer, int fallthrough) { struct us_internal_callback_t *cb = (struct us_internal_callback_t *) timer; us_poll_stop(&cb->p, cb->loop); close(us_poll_fd(&cb->p)); - /* (regular) sockets are the only polls which are not freed immediately */ - us_poll_free((struct us_poll_t *) timer, cb->loop); + /* (regular) sockets are the only polls which are not freed immediately */ + if(fallthrough){ + us_free(timer); + }else { + us_poll_free((struct us_poll_t *) timer, cb->loop); + } } void us_timer_set(struct us_timer_t *t, void (*cb)(struct us_timer_t *t), int ms, int repeat_ms) { @@ -438,7 +442,7 @@ void us_timer_set(struct us_timer_t *t, void (*cb)(struct us_timer_t *t), int ms us_poll_start((struct us_poll_t *) t, internal_cb->loop, LIBUS_SOCKET_READABLE); } #else -void us_timer_close(struct us_timer_t *timer) { +void us_timer_close(struct us_timer_t *timer, int fallthrough) { struct us_internal_callback_t *internal_cb = (struct us_internal_callback_t *) timer; struct kevent64_s event; @@ -446,7 +450,11 @@ void us_timer_close(struct us_timer_t *timer) { kevent64(internal_cb->loop->fd, &event, 1, NULL, 0, 0, NULL); /* (regular) sockets are the only polls which are not freed immediately */ - us_poll_free((struct us_poll_t *) timer, internal_cb->loop); + if(fallthrough){ + us_free(timer); + }else { + us_poll_free((struct us_poll_t *) timer, internal_cb->loop); + } } void us_timer_set(struct us_timer_t *t, void (*cb)(struct us_timer_t *t), int ms, int repeat_ms) { |