Skip to content

Commit

Permalink
Implement us_internal_loop_unlink
Browse files Browse the repository at this point in the history
  • Loading branch information
uNetworkingAB committed Nov 7, 2019
1 parent 272cb05 commit 8a71c0c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ void us_socket_context_free(int ssl, struct us_socket_context_t *context) {
}
#endif

us_internal_loop_unlink(context->loop, context);
free(context);
}

Expand Down
1 change: 1 addition & 0 deletions src/internal/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ void us_internal_dispatch_ready_poll(struct us_poll_t *p, int error, int events)
void us_internal_timer_sweep(struct us_loop_t *loop);
void us_internal_free_closed_sockets(struct us_loop_t *loop);
void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *context);
void us_internal_loop_unlink(struct us_loop_t *loop, struct us_socket_context_t *context);
void us_internal_loop_data_init(struct us_loop_t *loop, void (*wakeup_cb)(struct us_loop_t *loop),
void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop));
void us_internal_loop_data_free(struct us_loop_t *loop);
Expand Down
16 changes: 16 additions & 0 deletions src/loop.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ void us_wakeup_loop(struct us_loop_t *loop) {
}

void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *context) {
/* Insert this context as the head of loop */
context->next = loop->data.head;
context->prev = 0;
if (loop->data.head) {
Expand All @@ -61,6 +62,21 @@ void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *c
loop->data.head = context;
}

/* Unlink is called before free */
void us_internal_loop_unlink(struct us_loop_t *loop, struct us_socket_context_t *context) {
if (loop->data.head == context) {
loop->data.head = context->next;
if (loop->data.head) {
loop->data.head->prev = 0;
}
} else {
context->prev->next = context->next;
if (context->next) {
context->next->prev = context->prev;
}
}
}

/* This functions should never run recursively */
void us_internal_timer_sweep(struct us_loop_t *loop) {
struct us_internal_loop_data_t *loop_data = &loop->data;
Expand Down

0 comments on commit 8a71c0c

Please sign in to comment.