for ( ;; ) {
ret = njs_vm_execute_pending_job(vm);
if (ret <= NJS_OK) {
- if (ret == NJS_ERROR || njs_vm_unhandled_rejection(vm)) {
+ if (ret == NJS_ERROR) {
njs_process_output(vm, NULL, ret);
if (!njs_vm_options(vm)->interactive) {
}
}
+ if (njs_vm_unhandled_rejection(vm)) {
+ njs_process_output(vm, NULL, NJS_ERROR);
+
+ if (!njs_vm_options(vm)->interactive) {
+ return NJS_ERROR;
+ }
+ }
+
ret = njs_process_events(runtime);
if (njs_slow_path(ret == NJS_ERROR)) {
break;
if (ret <= NJS_OK) {
c = ngx_external_connection(vm, njs_vm_external_ptr(vm));
- if (ret == NJS_ERROR || njs_vm_unhandled_rejection(vm)) {
+ if (ret == NJS_ERROR) {
ngx_js_exception(vm, &exception);
ngx_log_error(NGX_LOG_ERR, c->log, 0,
for ( ;; ) {
ret = njs_vm_execute_pending_job(vm);
if (ret <= NJS_OK) {
- if (ret == NJS_ERROR || njs_vm_unhandled_rejection(vm)) {
+ if (ret == NJS_ERROR) {
ngx_js_exception(vm, &exception);
ngx_log_error(NGX_LOG_ERR, log, 0,
}
}
+ if (njs_vm_unhandled_rejection(vm)) {
+ ngx_js_exception(vm, &exception);
+
+ ngx_log_error(NGX_LOG_ERR, log, 0, "js exception: %V", &exception);
+ return NGX_ERROR;
+ }
+
ctx = ngx_external_ctx(vm, njs_vm_external_ptr(vm));
return njs_rbtree_is_empty(&ctx->waiting_events) ? NGX_OK : NGX_AGAIN;