One less dynamic http allocation. Also one less crash.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4689 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
Cory McWilliams 2023-12-21 17:15:59 +00:00
parent 9e7c860414
commit 86046e52f0

View File

@ -19,6 +19,7 @@ typedef struct _tf_http_connection_t
{ {
tf_http_t* http; tf_http_t* http;
uv_tcp_t tcp; uv_tcp_t tcp;
uv_shutdown_t shutdown;
const char* method; const char* method;
const char* path; const char* path;
@ -295,7 +296,7 @@ static void _http_on_connection(uv_stream_t* stream, int status)
return; return;
} }
http->connections = tf_realloc(http->connections, http->connections_count + 1); http->connections = tf_realloc(http->connections, sizeof(tf_http_connection_t*) * (http->connections_count + 1));
http->connections[http->connections_count++] = connection; http->connections[http->connections_count++] = connection;
} }
@ -403,7 +404,7 @@ static const char* _http_status_text(int status)
static void _http_on_shutdown(uv_shutdown_t* request, int status) static void _http_on_shutdown(uv_shutdown_t* request, int status)
{ {
tf_free(request); request->data = NULL;
} }
void tf_http_respond(tf_http_request_t* request, int status, const char** headers, int headers_count, const void* body, size_t content_length) void tf_http_respond(tf_http_request_t* request, int status, const char** headers, int headers_count, const void* body, size_t content_length)
@ -457,11 +458,11 @@ void tf_http_respond(tf_http_request_t* request, int status, const char** header
tf_printf("uv_write: %s\n", uv_strerror(r)); tf_printf("uv_write: %s\n", uv_strerror(r));
} }
if (request->connection->connection_close) if (request->connection->connection_close &&
!request->connection->shutdown.data)
{ {
uv_shutdown_t* shutdown_request = tf_malloc(sizeof(uv_shutdown_t)); request->connection->shutdown.data = request->connection;
*shutdown_request = (uv_shutdown_t) { .data = request }; uv_shutdown(&request->connection->shutdown, (uv_stream_t*)&request->connection->tcp, _http_on_shutdown);
uv_shutdown(shutdown_request, (uv_stream_t*)&request->connection->tcp, _http_on_shutdown);
} }
tf_free(request); tf_free(request);
} }