aports/main/nginx/nginx-upload-progress-module~fix-http2.patch
2023-11-20 17:24:39 +00:00

44 lines
1.9 KiB
Diff

Patch-Source: https://github.com/masterzen/nginx-upload-progress-module/pull/57
--
From 594f1233c3c622ad51a2bde0c3289747af20e245 Mon Sep 17 00:00:00 2001
From: Allan Jude <allanjude@freebsd.org>
Date: Sat, 26 Nov 2022 20:28:10 +0000
Subject: [PATCH] Restore functionality of upload-progress for HTTP2
The upload-progress module was only getting notified of the first
block of uploaded data, because r->read_event_handler was being
reset by ngx_http_v2_read_request_body() and
ngx_http_v2_process_request_body()
The patch detects that situation, updates module_ctx to call the
new function, then reinserts itself as the read_event_handler so
we continue to be notified about uploaded data.
Introduced in nginx/nginx@67d160bf25e02ba6679bb6c3b9cbdfeb29b759de
Sponsored-by: ScaleEngine Inc.
---
ngx_http_uploadprogress_module.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/ngx_http_uploadprogress_module.c b/ngx_http_uploadprogress_module.c
index 33bdaf7..f17ad92 100644
--- a/ngx_http_uploadprogress_module.c
+++ b/ngx_http_uploadprogress_module.c
@@ -489,6 +489,16 @@ static void ngx_http_uploadprogress_event_handler(ngx_http_request_t *r)
module_ctx = ngx_http_get_module_ctx(r, ngx_http_uploadprogress_module);
if (module_ctx != NULL ) {
module_ctx->read_event_handler(r);
+ /*
+ * Both ngx_http_v2_read_request_body() and
+ * ngx_http_v2_process_request_body() modify read_event_handler,
+ * we respect the change, but re-interpose our function so we still get
+ * future events, otherwise we miss all upload progress.
+ */
+ if (r->read_event_handler != ngx_http_uploadprogress_event_handler) {
+ module_ctx->read_event_handler = r->read_event_handler;
+ r->read_event_handler = ngx_http_uploadprogress_event_handler;
+ }
}
/* at this stage, r is not anymore safe to use */