diff --git a/lib/client/client-handshake.c b/lib/client/client-handshake.c index c2873a90..28d74dd3 100644 --- a/lib/client/client-handshake.c +++ b/lib/client/client-handshake.c @@ -434,7 +434,7 @@ failed: wsi->user_space, (void *)cce, strlen(cce)); wsi->already_did_cce = 1; failed1: - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "client_connect2"); return NULL; } diff --git a/lib/client/client.c b/lib/client/client.c index 5217cca8..a4eb7a6e 100644 --- a/lib/client/client.c +++ b/lib/client/client.c @@ -310,7 +310,7 @@ start_ws_handshake: return 0; lwsl_err("Failed to generate handshake for client\n"); - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "chs"); return 0; } @@ -323,7 +323,7 @@ start_ws_handshake: switch (n) { case LWS_SSL_CAPABLE_ERROR: lwsl_debug("ERROR writing to client socket\n"); - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "cws"); return 0; case LWS_SSL_CAPABLE_MORE_SERVICE: lws_callback_on_writable(wsi); @@ -434,7 +434,7 @@ bail3: LWS_CALLBACK_CLIENT_CONNECTION_ERROR, wsi->user_space, (void *)cce, cce ? strlen(cce) : 0); wsi->already_did_cce = 1; - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "cbail3"); return -1; case LWSCM_WSCL_WAITING_EXTENSION_CONNECT: @@ -1140,7 +1140,7 @@ bail2: lwsl_info("closing connection due to bail2 connection error\n"); /* closing will free up his parsing allocations */ - lws_close_free_wsi(wsi, close_reason); + lws_close_free_wsi(wsi, close_reason, "c hs interp"); return 1; } diff --git a/lib/context.c b/lib/context.c index 67636c34..f0cb8bab 100644 --- a/lib/context.c +++ b/lib/context.c @@ -1364,7 +1364,7 @@ lws_context_deprecate(struct lws_context *context, lws_reload_func cb) wsi = vh->lserv_wsi; if (wsi) { wsi->socket_is_permanently_unusable = 1; - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "ctx deprecate"); wsi->context->deprecation_pending_listen_close_count++; /* * other vhosts can share the listen port, they @@ -1462,7 +1462,8 @@ lws_vhost_destroy1(struct lws_vhost *vh) continue; lws_close_free_wsi(wsi, - LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY + LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY, + "vh destroy" /* no protocol close */); n--; } @@ -1696,7 +1697,8 @@ lws_context_destroy(struct lws_context *context) lws_destroy_event_pipe(wsi); else lws_close_free_wsi(wsi, - LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY + LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY, + "ctx destroy" /* no protocol close */); n--; } diff --git a/lib/event-libs/libuv.c b/lib/event-libs/libuv.c index abacb16c..47c3615e 100644 --- a/lib/event-libs/libuv.c +++ b/lib/event-libs/libuv.c @@ -461,7 +461,7 @@ lws_libuv_stop(struct lws_context *context) if (!wsi) continue; lws_close_free_wsi(wsi, - LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY + LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY, __func__ /* no protocol close */); n--; } diff --git a/lib/handshake.c b/lib/handshake.c index 1ea51563..d18aa180 100644 --- a/lib/handshake.c +++ b/lib/handshake.c @@ -127,7 +127,7 @@ lws_read(struct lws *wsi, unsigned char *buf, lws_filepos_t len) buf += body_chunk_len; len -= body_chunk_len; } - lwsl_debug("%s: used up block\n", __func__); +// lwsl_debug("%s: used up block\n", __func__); break; #endif @@ -170,7 +170,7 @@ lws_read(struct lws *wsi, unsigned char *buf, lws_filepos_t len) * appropriately: */ len -= (buf - last_char); - lwsl_debug("%s: thinks we have used %ld\n", __func__, (long)len); +// lwsl_debug("%s: thinks we have used %ld\n", __func__, (long)len); if (!wsi->hdr_parsing_completed) /* More header content on the way */ @@ -303,8 +303,8 @@ postbody_completion: read_ok: /* Nothing more to do for now */ - lwsl_info("%s: %p: read_ok, used %ld (len %d, state %d)\n", __func__, - wsi, (long)(buf - oldbuf), (int)len, wsi->state); +// lwsl_info("%s: %p: read_ok, used %ld (len %d, state %d)\n", __func__, +// wsi, (long)(buf - oldbuf), (int)len, wsi->state); return lws_ptr_diff(buf, oldbuf); @@ -315,7 +315,7 @@ bail: * the wsi close. */ if (!wsi->outer_will_close) - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "lws_read bail"); return -1; } diff --git a/lib/http2/http2.c b/lib/http2/http2.c index f3728245..520c01b2 100644 --- a/lib/http2/http2.c +++ b/lib/http2/http2.c @@ -655,11 +655,11 @@ int lws_h2_do_pps_send(struct lws *wsi) } cwsi = lws_h2_wsi_from_id(wsi, pps->u.rs.sid); if (cwsi) - lws_close_free_wsi(cwsi, 0); + lws_close_free_wsi(cwsi, 0, "reset stream"); break; case LWS_H2_PPS_UPDATE_WINDOW: - lwsl_notice("LWS_H2_PPS_UPDATE_WINDOW: sid %d: add %d\n", + lwsl_notice("Issuing LWS_H2_PPS_UPDATE_WINDOW: sid %d: add %d\n", pps->u.update_window.sid, pps->u.update_window.credit); *p++ = pps->u.update_window.credit >> 24; @@ -992,7 +992,7 @@ lws_h2_parse_frame_header(struct lws *wsi) lws_start_foreach_ll(struct lws *, w, wsi->h2.child_list) { if (w->h2.my_sid < h2n->sid && w->h2.h2_state == LWS_H2_STATE_IDLE) - lws_close_free_wsi(w, 0); + lws_close_free_wsi(w, 0, "h2 sid close"); } lws_end_foreach_ll(w, h2.sibling_list); diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index bba1182a..e8114f90 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -215,7 +215,7 @@ lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs) if (secs == LWS_TO_KILL_SYNC) { lws_remove_from_timeout_list(wsi); lwsl_debug("synchronously killing %p\n", wsi); - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "to sync kill"); return; } @@ -357,7 +357,7 @@ lws_bind_protocol(struct lws *wsi, const struct lws_protocols *p) } void -lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason) +lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason, const char *caller) { struct lws_context_per_thread *pt; struct lws *wsi1, *wsi2; @@ -365,7 +365,7 @@ lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason) struct lws_tokens eff_buf; int n, m, ret; - lwsl_debug("%s: %p\n", __func__, wsi); + lwsl_debug("%s: %p: caller: %s\n", __func__, wsi, caller); if (!wsi) return; @@ -387,7 +387,7 @@ lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason) wsi2->parent = NULL; /* stop it doing shutdown processing */ wsi2->socket_is_permanently_unusable = 1; - lws_close_free_wsi(wsi2, reason); + lws_close_free_wsi(wsi2, reason, "general child recurse"); wsi2 = wsi1; } wsi->child_list = NULL; @@ -421,7 +421,7 @@ lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason) wsi2 = (*w)->h2.sibling_list; (*w)->h2.sibling_list = NULL; (*w)->socket_is_permanently_unusable = 1; - lws_close_free_wsi(*w, reason); + lws_close_free_wsi(*w, reason, "h2 child recurse"); *w = wsi2; continue; } lws_end_foreach_llp(w, h2.sibling_list); diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h index e25b8c87..b74004e1 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -2016,7 +2016,7 @@ lws_get_addr_scope(const char *ipaddr); #endif LWS_EXTERN void -lws_close_free_wsi(struct lws *wsi, enum lws_close_status); +lws_close_free_wsi(struct lws *wsi, enum lws_close_status, const char *caller); LWS_EXTERN void lws_free_wsi(struct lws *wsi); diff --git a/lib/server/cgi.c b/lib/server/cgi.c index 06802eb2..4ae67023 100644 --- a/lib/server/cgi.c +++ b/lib/server/cgi.c @@ -943,7 +943,7 @@ handled: (void *)&args, wsi->cgi->pid); wsi->cgi->pid = -1; if (n && !wsi->cgi->being_closed) - lws_close_free_wsi(wsi, 0); + lws_close_free_wsi(wsi, 0, "lws_cgi_kill"); } return 0; diff --git a/lib/server/server.c b/lib/server/server.c index aa76e171..48f5a2ad 100644 --- a/lib/server/server.c +++ b/lib/server/server.c @@ -2124,7 +2124,7 @@ lws_adopt_descriptor_vhost(struct lws_vhost *vh, lws_adoption_type type, fail: if (type & LWS_ADOPT_SOCKET) - lws_close_free_wsi(new_wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(new_wsi, LWS_CLOSE_STATUS_NOSTATUS, "adopt skt fail"); return NULL; @@ -2227,7 +2227,7 @@ adopt_socket_readbuf(struct lws *wsi, const char *readbuf, size_t len) return wsi; bail: - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "adopt skt readbuf fail"); return NULL; } @@ -2700,7 +2700,7 @@ try_pollout: return 0; fail: - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "server socket svc fail"); return 1; } diff --git a/lib/service.c b/lib/service.c index 31f439e7..817afbb7 100644 --- a/lib/service.c +++ b/lib/service.c @@ -463,7 +463,7 @@ user_service_go_again: strlen(w->h2.pending_status_body + LWS_PRE), LWS_WRITE_HTTP_FINAL); lws_free_set_NULL(w->h2.pending_status_body); - lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream 1"); wa = &wsi->h2.child_list; goto next_child; } @@ -493,7 +493,7 @@ user_service_go_again: */ if (n || w->h2.send_END_STREAM) { lwsl_info("closing stream after h2 action\n"); - lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream"); wa = &wsi->h2.child_list; } @@ -519,7 +519,7 @@ user_service_go_again: */ if (n < 0 || w->h2.send_END_STREAM) { lwsl_debug("Closing POLLOUT child %p\n", w); - lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream file"); wa = &wsi->h2.child_list; goto next_child; } @@ -536,7 +536,7 @@ user_service_go_again: if (lws_calllback_as_writeable(w) || w->h2.send_END_STREAM) { lwsl_debug("Closing POLLOUT child\n"); - lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 pollout handle"); wa = &wsi->h2.child_list; } @@ -627,7 +627,7 @@ lws_service_timeout_check(struct lws *wsi, time_t sec) if (wsi->protocol && wsi->protocol->callback(wsi, LWS_CALLBACK_TIMER, wsi->user_space, NULL, 0)) { - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "timer cb errored"); return 1; } @@ -682,7 +682,7 @@ lws_service_timeout_check(struct lws *wsi, time_t sec) wsi->user_space, (void *)"Timed out waiting SSL", 21); - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "timeout"); return 1; } @@ -1206,7 +1206,7 @@ lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, /* it was the guy we came to service! */ timed_out = 1; - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "excessive ah"); ah = pt->ah_list; } @@ -1838,7 +1838,7 @@ drain: close_and_handled: lwsl_debug("%p: Close and handled\n", wsi); - lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "close_and_handled"); /* * pollfd may point to something else after the close * due to pollfd swapping scheme on delete on some platforms