MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

close connection after freeing

+8 -11
+8 -11
src/net/connection.c
··· 18 18 19 19 typedef struct { 20 20 uv_shutdown_t req; 21 + ant_conn_t *conn; 21 22 } ant_conn_shutdown_req_t; 22 23 23 24 static void ant_conn_restart_timer(ant_conn_t *conn); ··· 26 27 static void ant_listener_remove_conn(ant_listener_t *listener, ant_conn_t *conn) { 27 28 ant_conn_t **it = NULL; 28 29 if (!listener || !conn) return; 29 - 30 - for (it = &listener->connections; *it; it = &(*it)->next) { 31 - if (*it == conn) { 32 - *it = conn->next; 33 - return; 34 - }} 30 + for (it = &listener->connections; *it; it = &(*it)->next) 31 + if (*it == conn) { *it = conn->next; return; } 35 32 } 36 33 37 34 static bool ant_conn_store_addr( ··· 194 191 195 192 static void ant_conn_shutdown_cb(uv_shutdown_t *req, int status) { 196 193 ant_conn_shutdown_req_t *shutdown_req = (ant_conn_shutdown_req_t *)req; 194 + ant_conn_t *conn = shutdown_req ? shutdown_req->conn : NULL; 197 195 free(shutdown_req); 196 + ant_conn_close(conn); 198 197 } 199 198 200 199 static void ant_conn_close_cb(uv_handle_t *handle) { 201 200 ant_conn_t *conn = (ant_conn_t *)handle->data; 202 201 ant_listener_t *listener = conn ? conn->listener : NULL; 202 + 203 203 if (!conn || !listener) return; 204 - 205 204 if (--conn->close_handles > 0) return; 206 205 207 206 ant_listener_remove_conn(listener, conn); ··· 381 380 return; 382 381 } 383 382 383 + req->conn = conn; 384 384 rc = uv_shutdown(&req->req, ant_conn_stream(conn), ant_conn_shutdown_cb); 385 - if (rc != 0) { 386 - free(req); 387 - ant_conn_close(conn); 388 - } 385 + if (rc != 0) { free(req); ant_conn_close(conn); } 389 386 } 390 387 391 388 void ant_conn_ref(ant_conn_t *conn) {