summaryrefslogtreecommitdiff
path: root/src/node_worker.h
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-02-22 20:11:19 +0100
committerAnna Henningsen <anna@addaleax.net>2019-03-30 22:25:35 +0100
commit9fbf0c60b583dae3d34598352c3c7614118cd035 (patch)
treed615114117264cce1c469f2ff80088dfddf6149b /src/node_worker.h
parent1ee37aac09f263b00029561542cf3bea5db5113b (diff)
downloadandroid-node-v8-9fbf0c60b583dae3d34598352c3c7614118cd035.tar.gz
android-node-v8-9fbf0c60b583dae3d34598352c3c7614118cd035.tar.bz2
android-node-v8-9fbf0c60b583dae3d34598352c3c7614118cd035.zip
worker: use copy of process.env
Instead of sharing the OS-backed store for all `process.env` instances, create a copy of `process.env` for every worker that is created. The copies do not interact. Native-addons do not see modifications to `process.env` from Worker threads, but child processes started from Workers do default to the Worker’s copy of `process.env`. This makes Workers behave like child processes as far as `process.env` is concerned, and an option corresponding to the `child_process` module’s `env` option is added to the constructor. Fixes: https://github.com/nodejs/node/issues/24947 PR-URL: https://github.com/nodejs/node/pull/26544 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com> Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Diffstat (limited to 'src/node_worker.h')
-rw-r--r--src/node_worker.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/node_worker.h b/src/node_worker.h
index b23ab704b0..94af8160c6 100644
--- a/src/node_worker.h
+++ b/src/node_worker.h
@@ -43,6 +43,9 @@ class Worker : public AsyncWrap {
bool is_stopped() const;
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
+ static void CloneParentEnvVars(
+ const v8::FunctionCallbackInfo<v8::Value>& args);
+ static void SetEnvVars(const v8::FunctionCallbackInfo<v8::Value>& args);
static void StartThread(const v8::FunctionCallbackInfo<v8::Value>& args);
static void StopThread(const v8::FunctionCallbackInfo<v8::Value>& args);
static void Ref(const v8::FunctionCallbackInfo<v8::Value>& args);
@@ -78,6 +81,7 @@ class Worker : public AsyncWrap {
static constexpr size_t kStackBufferSize = 192 * 1024;
std::unique_ptr<MessagePortData> child_port_data_;
+ std::shared_ptr<KVStore> env_vars_;
// The child port is kept alive by the child Environment's persistent
// handle to it, as long as that child Environment exists.