[njs] QuickJS: fixed memory leak in js_periodic handler.
noreply at nginx.com
noreply at nginx.com
Thu Feb 20 18:18:02 UTC 2025
details: https://github.com/nginx/njs/commit/1b451958979d38dc162cfa2872197fcba9381f7d
branches: master
commit: 1b451958979d38dc162cfa2872197fcba9381f7d
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Wed, 19 Feb 2025 17:36:46 -0800
description:
QuickJS: fixed memory leak in js_periodic handler.
---
nginx/ngx_http_js_module.c | 17 ++++++++++++++++-
nginx/ngx_stream_js_module.c | 17 ++++++++++++++++-
2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c
index 7cd87401..cdc668c5 100644
--- a/nginx/ngx_http_js_module.c
+++ b/nginx/ngx_http_js_module.c
@@ -355,6 +355,7 @@ static ngx_http_request_t *ngx_http_qjs_request(JSValueConst val);
static JSValue ngx_http_qjs_request_make(JSContext *cx, ngx_int_t proto_id,
ngx_http_request_t *r);
static void ngx_http_qjs_request_finalizer(JSRuntime *rt, JSValue val);
+static void ngx_http_qjs_periodic_finalizer(JSRuntime *rt, JSValue val);
#endif
static ngx_pool_t *ngx_http_js_pool(ngx_http_request_t *r);
@@ -1097,7 +1098,7 @@ static JSClassDef ngx_http_qjs_request_class = {
static JSClassDef ngx_http_qjs_periodic_class = {
"PeriodicSession",
- .finalizer = NULL,
+ .finalizer = ngx_http_qjs_periodic_finalizer,
};
@@ -7553,6 +7554,20 @@ ngx_http_qjs_request_finalizer(JSRuntime *rt, JSValue val)
}
+static void
+ngx_http_qjs_periodic_finalizer(JSRuntime *rt, JSValue val)
+{
+ ngx_http_qjs_request_t *req;
+
+ req = JS_GetOpaque(val, NGX_QJS_CLASS_ID_HTTP_PERIODIC);
+ if (req == NULL) {
+ return;
+ }
+
+ js_free_rt(rt, req);
+}
+
+
static ngx_engine_t *
ngx_engine_qjs_clone(ngx_js_ctx_t *ctx, ngx_js_loc_conf_t *cf,
njs_int_t proto_id, void *external)
diff --git a/nginx/ngx_stream_js_module.c b/nginx/ngx_stream_js_module.c
index 59a3e9d2..db00b922 100644
--- a/nginx/ngx_stream_js_module.c
+++ b/nginx/ngx_stream_js_module.c
@@ -191,6 +191,7 @@ static ngx_stream_session_t *ngx_stream_qjs_session(JSValueConst val);
static JSValue ngx_stream_qjs_session_make(JSContext *cx, ngx_int_t proto_id,
ngx_stream_session_t *s);
static void ngx_stream_qjs_session_finalizer(JSRuntime *rt, JSValue val);
+static void ngx_stream_qjs_periodic_finalizer(JSRuntime *rt, JSValue val);
#endif
@@ -813,7 +814,7 @@ static JSClassDef ngx_stream_qjs_session_class = {
static JSClassDef ngx_stream_qjs_periodic_class = {
"Periodic",
- .finalizer = NULL,
+ .finalizer = ngx_stream_qjs_periodic_finalizer,
};
@@ -2812,6 +2813,20 @@ ngx_stream_qjs_session_finalizer(JSRuntime *rt, JSValue val)
}
+static void
+ngx_stream_qjs_periodic_finalizer(JSRuntime *rt, JSValue val)
+{
+ ngx_stream_qjs_session_t *ses;
+
+ ses = JS_GetOpaque(val, NGX_QJS_CLASS_ID_STREAM_PERIODIC);
+ if (ses == NULL) {
+ return;
+ }
+
+ js_free_rt(rt, ses);
+}
+
+
static ngx_engine_t *
ngx_engine_qjs_clone(ngx_js_ctx_t *ctx, ngx_js_loc_conf_t *cf,
njs_int_t proto_id, void *external)
More information about the nginx-devel
mailing list