h2, NGHTTP2_FLAG_NONE, stream_id, NGHTTP2_REFUSED_STREAM);
}
-static void free_headers(kr_http_header_array_t *headers)
+void http_free_headers(kr_http_header_array_t *headers)
{
if (headers == NULL)
return;
ctx->current_method = HTTP_METHOD_NONE;
free(ctx->uri_path);
ctx->uri_path = NULL;
- free_headers(ctx->headers);
+ http_free_headers(ctx->headers);
ctx->headers = NULL;
}
* processing HTTP stream. */
while (queue_len(ctx->streams) > 0) {
struct http_stream stream = queue_head(ctx->streams);
- free_headers(stream.headers);
+ http_free_headers(stream.headers);
if (stream.headers == ctx->headers)
ctx->headers = NULL; // to prevent double-free
queue_pop(ctx->streams);
int http_write(uv_write_t *req, uv_handle_t *handle, knot_pkt_t* pkt, int32_t stream_id,
uv_write_cb on_write);
void http_free(struct http_ctx *ctx);
+void http_free_headers(kr_http_header_array_t *headers);
#endif
(is_query == is_outgoing)) {
if (!is_outgoing) {
the_worker->stats.dropped += 1;
- if (http_ctx)
+ if (http_ctx) {
+ struct http_stream stream = queue_head(http_ctx->streams);
+ http_free_headers(stream.headers);
queue_pop(http_ctx->streams);
+ }
}
return kr_error(EILSEQ);
}