]> git.kaiwu.me - njs.git/commitdiff
Improved handling of traps inside trap handlers.
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 30 Aug 2018 17:21:43 +0000 (20:21 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Thu, 30 Aug 2018 17:21:43 +0000 (20:21 +0300)
njs/njs_vm.c

index 0c68234ea466d7be09dc89e87f38976c2f3876d0..7527749d6ee8b80df181040b94712c6a54c48fd7 100644 (file)
@@ -3280,6 +3280,12 @@ njs_vmcode_restart(njs_vm_t *vm, njs_value_t *invld1, njs_value_t *invld2)
 
     ret = vmcode->code.operation(vm, value1, &frame->trap_values[1]);
 
+    if (nxt_slow_path(ret == NJS_TRAP)) {
+        /* Trap handlers are not reentrant. */
+        njs_internal_error(vm, "trap inside restart instruction");
+        return NXT_ERROR;
+    }
+
     retval = njs_vmcode_operand(vm, vmcode->operand1);
 
     //njs_release(vm, retval);