-
-
Save xeioex/230762bc4d06113b6073feedb7d07168 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/nginx/ngx_js.c b/nginx/ngx_js.c | |
| index 5f9ea2fb..06b07f98 100644 | |
| --- a/nginx/ngx_js.c | |
| +++ b/nginx/ngx_js.c | |
| @@ -691,10 +691,9 @@ ngx_engine_njs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname, | |
| njs_opaque_value_t *args, njs_uint_t nargs) | |
| { | |
| njs_vm_t *vm; | |
| - njs_int_t ret; | |
| + njs_int_t ret, job_count; | |
| njs_str_t name; | |
| ngx_str_t exception; | |
| - ngx_uint_t job_count = 0; | |
| njs_function_t *func; | |
| name.start = fname->data; | |
| @@ -720,6 +719,8 @@ ngx_engine_njs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname, | |
| return NGX_ERROR; | |
| } | |
| + job_count = 0; | |
| + | |
| for ( ;; ) { | |
| ret = njs_vm_execute_pending_job(vm); | |
| if (ret <= NJS_OK) { | |
| @@ -735,10 +736,11 @@ ngx_engine_njs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname, | |
| } | |
| job_count++; | |
| + | |
| if (job_count >= NGX_MAX_JOB_ITERATIONS) { | |
| ngx_log_error(NGX_LOG_ERR, ctx->log, 0, | |
| - "js job queue processing limit exceeded (%ui iterations), " | |
| - "possible infinite loop in microtasks", NGX_MAX_JOB_ITERATIONS); | |
| + "js job queue processing exceeded %ui iterations", | |
| + NGX_MAX_JOB_ITERATIONS); | |
| return NGX_ERROR; | |
| } | |
| } | |
| @@ -756,7 +758,7 @@ ngx_engine_njs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname, | |
| } else if (state == NJS_PROMISE_PENDING && | |
| njs_rbtree_is_empty(&ctx->waiting_events)) | |
| { | |
| - ngx_log_error(NGX_LOG_ERR, ctx->log, 0, | |
| + ngx_log_error(NGX_LOG_ERR, ctx->log, 0, | |
| "js promise pending, no jobs, no waiting_events"); | |
| return NGX_ERROR; | |
| } | |
| @@ -1059,12 +1061,11 @@ static ngx_int_t | |
| ngx_engine_qjs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname, | |
| njs_opaque_value_t *args, njs_uint_t nargs) | |
| { | |
| - int rc; | |
| + int rc, job_count; | |
| JSValue fn, val; | |
| ngx_str_t exception; | |
| JSRuntime *rt; | |
| JSContext *cx, *cx1; | |
| - ngx_uint_t job_count = 0; | |
| cx = ctx->engine->u.qjs.ctx; | |
| @@ -1093,6 +1094,8 @@ ngx_engine_qjs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname, | |
| rt = JS_GetRuntime(cx); | |
| + job_count = 0; | |
| + | |
| for ( ;; ) { | |
| rc = JS_ExecutePendingJob(rt, &cx1); | |
| if (rc <= 0) { | |
| @@ -1109,10 +1112,11 @@ ngx_engine_qjs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname, | |
| } | |
| job_count++; | |
| + | |
| if (job_count >= NGX_MAX_JOB_ITERATIONS) { | |
| ngx_log_error(NGX_LOG_ERR, ctx->log, 0, | |
| - "js job queue processing limit exceeded (%ui iterations), " | |
| - "possible infinite loop in microtasks", NGX_MAX_JOB_ITERATIONS); | |
| + "js job queue processing exceeded %ui iterations", | |
| + NGX_MAX_JOB_ITERATIONS); | |
| return NGX_ERROR; | |
| } | |
| } | |
| @@ -1134,7 +1138,7 @@ ngx_engine_qjs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname, | |
| } else if (state == JS_PROMISE_PENDING && | |
| njs_rbtree_is_empty(&ctx->waiting_events)) | |
| { | |
| - ngx_log_error(NGX_LOG_ERR, ctx->log, 0, | |
| + ngx_log_error(NGX_LOG_ERR, ctx->log, 0, | |
| "js promise pending, no jobs, no waiting_events"); | |
| return NGX_ERROR; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment