timers: check can_call_into_js in Immediates

Prevent an infinite loop if it's not possible to call into JS.

PR-URL: https://github.com/nodejs/node/pull/21057
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
Anatoli Papirovski 2018-05-31 12:10:07 +02:00
parent 898609e3b7
commit 5a6b1975d5
No known key found for this signature in database
GPG Key ID: 614E2E1ABEB4B2C0

View File

@ -457,6 +457,9 @@ void Environment::CheckImmediate(uv_check_t* handle) {
env->RunAndClearNativeImmediates();
if (!env->can_call_into_js())
return;
do {
MakeCallback(env->isolate(),
env->process_object(),
@ -464,7 +467,7 @@ void Environment::CheckImmediate(uv_check_t* handle) {
0,
nullptr,
{0, 0}).ToLocalChecked();
} while (env->immediate_info()->has_outstanding());
} while (env->immediate_info()->has_outstanding() && env->can_call_into_js());
if (env->immediate_info()->ref_count() == 0)
env->ToggleImmediateRef(false);