[njs] Modules: fixed promise events handling.
Alexander Borisov
alexander.borisov at nginx.com
Thu Nov 26 18:44:03 UTC 2020
details: https://hg.nginx.org/njs/rev/fac7e5dc8009
branches:
changeset: 1575:fac7e5dc8009
user: Alexander Borisov <alexander.borisov at nginx.com>
date: Thu Nov 26 21:43:17 2020 +0300
description:
Modules: fixed promise events handling.
Previously, promise chain might not be invoked at all in some cases.
Specifically, this happened in HTTP module if promise chain did not start
with a r.subrequest() invocation.
The fix is to always process all pending promise events after the main module
function.
This closes #359 issue on GitHub.
diffstat:
nginx/ngx_js.c | 6 +-----
src/njs_vm.c | 2 +-
2 files changed, 2 insertions(+), 6 deletions(-)
diffs (28 lines):
diff -r a141a29417dc -r fac7e5dc8009 nginx/ngx_js.c
--- a/nginx/ngx_js.c Thu Nov 26 11:36:03 2020 +0000
+++ b/nginx/ngx_js.c Thu Nov 26 21:43:17 2020 +0300
@@ -79,11 +79,7 @@ ngx_js_call(njs_vm_t *vm, ngx_str_t *fna
return NGX_ERROR;
}
- if (njs_vm_pending(vm)) {
- return NGX_AGAIN;
- }
-
- return NGX_OK;
+ return njs_vm_run(vm);
}
diff -r a141a29417dc -r fac7e5dc8009 src/njs_vm.c
--- a/src/njs_vm.c Thu Nov 26 11:36:03 2020 +0000
+++ b/src/njs_vm.c Thu Nov 26 21:43:17 2020 +0300
@@ -578,7 +578,7 @@ njs_vm_handle_events(njs_vm_t *vm)
} while (!njs_queue_is_empty(promise_events));
- return njs_posted_events(vm) ? NJS_AGAIN : NJS_OK;
+ return njs_vm_pending(vm) ? NJS_AGAIN : NJS_OK;
}
More information about the nginx-devel
mailing list