Skip to content

Instantly share code, notes, and snippets.

@xeioex
Created October 29, 2025 04:58
Show Gist options
  • Save xeioex/c1ec0abea1a6b351d441d1e13f1c9604 to your computer and use it in GitHub Desktop.
Save xeioex/c1ec0abea1a6b351d441d1e13f1c9604 to your computer and use it in GitHub Desktop.
commit 7a5de1585b7d65cf231f901ad9c6845ef3336a51
Author: Dmitry Volyntsev <[email protected]>
Date: Tue Oct 28 21:56:56 2025 -0700
fixup! Fetch: making sure catch handler is executed asynchronously.
diff --git a/nginx/ngx_js_fetch.c b/nginx/ngx_js_fetch.c
index 91698d11..fd40a5ba 100644
--- a/nginx/ngx_js_fetch.c
+++ b/nginx/ngx_js_fetch.c
@@ -669,21 +669,12 @@ ngx_js_ext_fetch(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
fail:
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, http->log, 0,
- "js http done fetch:%p rc:%i", fetch, NJS_ERROR);
+ "js http done fetch:%p rc:%d", fetch, NJS_ERROR);
- ngx_js_http_close_peer(&fetch->http);
+ ngx_js_del_event(ngx_external_ctx(vm, njs_vm_external_ptr(vm)),
+ fetch->event);
- if (fetch->event != NULL) {
- ret = ngx_js_fetch_promissified_result(vm, njs_value_arg(&lvalue),
- NJS_ERROR, retval);
-
- ngx_js_del_event(ngx_external_ctx(vm, njs_vm_external_ptr(vm)),
- fetch->event);
-
- ngx_external_event_finalize(vm)(njs_vm_external_ptr(vm), ret);
- }
-
- return NJS_OK;
+ return ngx_js_fetch_promissified_result(vm, NULL, NJS_ERROR, retval);
}
diff --git a/nginx/ngx_qjs_fetch.c b/nginx/ngx_qjs_fetch.c
index 2c2ef18c..731fba44 100644
--- a/nginx/ngx_qjs_fetch.c
+++ b/nginx/ngx_qjs_fetch.c
@@ -402,21 +402,13 @@ ngx_qjs_ext_fetch(JSContext *cx, JSValueConst this_val, int argc,
fail:
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, (&fetch->http)->log, 0,
- "js http done fetch:%p rc:%i", fetch, NGX_ERROR);
+ "js http done fetch:%p rc:%d", fetch, NGX_ERROR);
- ngx_js_http_close_peer(&fetch->http);
+ ngx_js_del_event(ngx_qjs_external_ctx(cx, external), fetch->event);
- if (fetch->event != NULL) {
- JS_FreeValue(cx, promise);
- promise = qjs_promise_result(cx, JS_EXCEPTION);
-
- ctx = ngx_qjs_external_ctx(cx, external);
- ngx_js_del_event(ctx, fetch->event);
+ JS_FreeValue(cx, promise);
- ngx_qjs_external_event_finalize(cx)(external, rc);
- }
-
- return promise;
+ return qjs_promise_result(cx, JS_EXCEPTION);
}
diff --git a/nginx/t/js_fetch.t b/nginx/t/js_fetch.t
index bc9ee4c5..f3601b82 100644
--- a/nginx/t/js_fetch.t
+++ b/nginx/t/js_fetch.t
@@ -257,7 +257,7 @@ $t->write_file('test.js', <<EOF);
})
})
- sync_catch = 'async';
+ sync_catch = 'async';
}
function broken_catch(r) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment