diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-11-12 18:33:37 +0000 |
---|---|---|
committer | Daniel Bevenius <daniel.bevenius@gmail.com> | 2019-11-18 06:16:25 +0100 |
commit | 850f38125c17624c8950291c273d759e74d4b0ea (patch) | |
tree | 61980f704050c2cd3d689c815504287f914c9dbb /src | |
parent | 3e2b68aff3a4b8c065ddb561122b18817201f524 (diff) | |
download | android-node-v8-850f38125c17624c8950291c273d759e74d4b0ea.tar.gz android-node-v8-850f38125c17624c8950291c273d759e74d4b0ea.tar.bz2 android-node-v8-850f38125c17624c8950291c273d759e74d4b0ea.zip |
src: enhance feature access `CHECK`s during bootstrap
This adds `CHECK`s verifying that bootstrapping has finished
before environment variables are accessed or handles/requests
are created. The latter complements a pair of existent checks,
but fails earlier and thus gives information about the call
site, effectively addressing the TODO comment there.
PR-URL: https://github.com/nodejs/node/pull/30452
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/handle_wrap.cc | 1 | ||||
-rw-r--r-- | src/node.cc | 3 | ||||
-rw-r--r-- | src/node_env_var.cc | 5 | ||||
-rw-r--r-- | src/req_wrap-inl.h | 1 |
4 files changed, 9 insertions, 1 deletions
diff --git a/src/handle_wrap.cc b/src/handle_wrap.cc index 888640e949..fc84ca19bb 100644 --- a/src/handle_wrap.cc +++ b/src/handle_wrap.cc @@ -116,6 +116,7 @@ HandleWrap::HandleWrap(Environment* env, handle_(handle) { handle_->data = this; HandleScope scope(env->isolate()); + CHECK(env->has_run_bootstrapping_code()); env->handle_wrap_queue()->PushBack(this); } diff --git a/src/node.cc b/src/node.cc index 5a8e6ea8c0..5379b42b57 100644 --- a/src/node.cc +++ b/src/node.cc @@ -344,7 +344,8 @@ MaybeLocal<Value> Environment::RunBootstrapping() { // Make sure that no request or handle is created during bootstrap - // if necessary those should be done in pre-execution. - // TODO(joyeecheung): print handles/requests before aborting + // Usually, doing so would trigger the checks present in the ReqWrap and + // HandleWrap classes, so this is only a consistency check. CHECK(req_wrap_queue()->IsEmpty()); CHECK(handle_wrap_queue()->IsEmpty()); diff --git a/src/node_env_var.cc b/src/node_env_var.cc index 9d229ccf4e..40c0515a3d 100644 --- a/src/node_env_var.cc +++ b/src/node_env_var.cc @@ -272,6 +272,7 @@ Maybe<bool> KVStore::AssignFromObject(Local<Context> context, static void EnvGetter(Local<Name> property, const PropertyCallbackInfo<Value>& info) { Environment* env = Environment::GetCurrent(info); + CHECK(env->has_run_bootstrapping_code()); if (property->IsSymbol()) { return info.GetReturnValue().SetUndefined(); } @@ -287,6 +288,7 @@ static void EnvSetter(Local<Name> property, Local<Value> value, const PropertyCallbackInfo<Value>& info) { Environment* env = Environment::GetCurrent(info); + CHECK(env->has_run_bootstrapping_code()); // calling env->EmitProcessEnvWarning() sets a variable indicating that // warnings have been emitted. It should be called last after other // conditions leading to a warning have been met. @@ -320,6 +322,7 @@ static void EnvSetter(Local<Name> property, static void EnvQuery(Local<Name> property, const PropertyCallbackInfo<Integer>& info) { Environment* env = Environment::GetCurrent(info); + CHECK(env->has_run_bootstrapping_code()); if (property->IsString()) { int32_t rc = env->env_vars()->Query(env->isolate(), property.As<String>()); if (rc != -1) info.GetReturnValue().Set(rc); @@ -329,6 +332,7 @@ static void EnvQuery(Local<Name> property, static void EnvDeleter(Local<Name> property, const PropertyCallbackInfo<Boolean>& info) { Environment* env = Environment::GetCurrent(info); + CHECK(env->has_run_bootstrapping_code()); if (property->IsString()) { env->env_vars()->Delete(env->isolate(), property.As<String>()); } @@ -340,6 +344,7 @@ static void EnvDeleter(Local<Name> property, static void EnvEnumerator(const PropertyCallbackInfo<Array>& info) { Environment* env = Environment::GetCurrent(info); + CHECK(env->has_run_bootstrapping_code()); info.GetReturnValue().Set( env->env_vars()->Enumerate(env->isolate())); diff --git a/src/req_wrap-inl.h b/src/req_wrap-inl.h index cf89fb58a7..4fa4d0cf21 100644 --- a/src/req_wrap-inl.h +++ b/src/req_wrap-inl.h @@ -10,6 +10,7 @@ namespace node { ReqWrapBase::ReqWrapBase(Environment* env) { + CHECK(env->has_run_bootstrapping_code()); env->req_wrap_queue()->PushBack(this); } |