diff --git a/src/env-inl.h b/src/env-inl.h index 4a34393cad7e07..e0093ebcfecd18 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -107,8 +107,7 @@ inline void AsyncHooks::SetJSPromiseHooks(v8::Local init, js_promise_hooks_[3].Reset(env()->isolate(), resolve); for (auto it = contexts_.begin(); it != contexts_.end(); it++) { if (it->IsEmpty()) { - it = contexts_.erase(it); - it--; + contexts_.erase(it--); continue; } PersistentToLocal::Weak(env()->isolate(), *it) @@ -251,12 +250,11 @@ inline void AsyncHooks::AddContext(v8::Local ctx) { inline void AsyncHooks::RemoveContext(v8::Local ctx) { v8::Isolate* isolate = env()->isolate(); v8::HandleScope handle_scope(isolate); + contexts_.erase(std::remove_if(contexts_.begin(), + contexts_.end(), + [&](auto&& el) { return el.IsEmpty(); }), + contexts_.end()); for (auto it = contexts_.begin(); it != contexts_.end(); it++) { - if (it->IsEmpty()) { - it = contexts_.erase(it); - it--; - continue; - } v8::Local saved_context = PersistentToLocal::Weak(isolate, *it); if (saved_context == ctx) {