return 0;
bail3:
- lws_free(wsi->u.ws.rx_user_buffer);
- wsi->u.ws.rx_user_buffer = NULL;
+ lws_free2(wsi->u.ws.rx_user_buffer);
close_reason = LWS_CLOSE_STATUS_NOSTATUS;
bail2:
if (getpid() == pid_daemon)
if (lock_path) {
unlink(lock_path);
- lws_free(lock_path);
- lock_path = NULL;
+ lws_free2(lock_path);
}
kill(getpid(), SIGKILL);
remove_wsi_socket_from_fds(context, wsi);
wsi->state = WSI_STATE_DEAD_SOCKET;
-
- if (wsi->rxflow_buffer) {
- lws_free(wsi->rxflow_buffer);
- wsi->rxflow_buffer = NULL;
- }
+
+ lws_free2(wsi->rxflow_buffer);
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING && wsi->u.hdr.ah) {
- lws_free(wsi->u.hdr.ah);
- wsi->u.hdr.ah = NULL;
+ lws_free2(wsi->u.hdr.ah);
}
-
+
if ((old_state == WSI_STATE_ESTABLISHED ||
wsi->mode == LWS_CONNMODE_WS_SERVING ||
wsi->mode == LWS_CONNMODE_WS_CLIENT)) {
- if (wsi->u.ws.rx_user_buffer) {
- lws_free(wsi->u.ws.rx_user_buffer);
- wsi->u.ws.rx_user_buffer = NULL;
- }
+ lws_free2(wsi->u.ws.rx_user_buffer);
if (wsi->truncated_send_malloc) {
/* not going to be completed... nuke it */
- lws_free(wsi->truncated_send_malloc);
- wsi->truncated_send_malloc = NULL;
+ lws_free2(wsi->truncated_send_malloc);
wsi->truncated_send_len = 0;
}
if (wsi->u.ws.ping_payload_buf) {
- lws_free(wsi->u.ws.ping_payload_buf);
- wsi->u.ws.ping_payload_buf = NULL;
+ lws_free2(wsi->u.ws.ping_payload_buf);
wsi->u.ws.ping_payload_alloc = 0;
wsi->u.ws.ping_payload_len = 0;
}
int lws_free_header_table(struct libwebsocket *wsi)
{
- if (wsi->u.hdr.ah) {
- lws_free(wsi->u.hdr.ah);
- wsi->u.hdr.ah = NULL;
- }
+ lws_free2(wsi->u.hdr.ah);
+ wsi->u.hdr.ah = NULL;
return 0;
};
/* if existing buffer is too small, drop it */
if (wsi->u.ws.ping_payload_buf &&
wsi->u.ws.ping_payload_alloc < wsi->u.ws.rx_user_buffer_head) {
- lws_free(wsi->u.ws.ping_payload_buf);
- wsi->u.ws.ping_payload_buf = NULL;
+ lws_free2(wsi->u.ws.ping_payload_buf);
}
/* if no buffer, allocate it */
#define lws_malloc(S) lws_realloc(NULL, S)
#define lws_free(P) lws_realloc(P, 0)
+#define lws_free2(P) do { lws_realloc(P, 0); (P) = NULL; } while(0)
/*
* lws_plat_
}
/* now drop the header info we kept a pointer to */
- lws_free(wsi->u.http.ah);
- /* not possible to continue to use past here */
- wsi->u.http.ah = NULL;
+ lws_free2(wsi->u.http.ah);
if (n) {
lwsl_info("LWS_CALLBACK_HTTP closing\n");
bail_nuke_ah:
/* drop the header info */
- if (wsi->u.hdr.ah) {
- lws_free(wsi->u.hdr.ah);
- wsi->u.hdr.ah = NULL;
- }
-
+ lws_free2(wsi->u.hdr.ah);
+
return 1;
}
if (draining_flow && wsi->rxflow_buffer &&
wsi->rxflow_pos == wsi->rxflow_len) {
lwsl_info("flow buffer: drained\n");
- lws_free(wsi->rxflow_buffer);
- wsi->rxflow_buffer = NULL;
+ lws_free2(wsi->rxflow_buffer);
/* having drained the rxflow buffer, can rearm POLLIN */
_libwebsocket_rx_flow_control(wsi); /* n ignored, needed for NO_SERVER case */
}