| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent ded8335 commit 10370c5
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -655,10 +655,10 @@ void AddLinkedBinding(Environment* env, const node_module& mod) { | |||
| 655 | 655 | CHECK_NOT_NULL(env); | |
| 656 | 656 | Mutex::ScopedLock lock(env->extra_linked_bindings_mutex()); | |
| 657 | 657 | ||
| 658 | - node_module* prev_head = env->extra_linked_bindings_head(); | ||
| 658 | + node_module* prev_tail = env->extra_linked_bindings_tail(); | ||
| 659 | 659 | env->extra_linked_bindings()->push_back(mod); | |
| 660 | - if (prev_head != nullptr) | ||
| 661 | - prev_head->nm_link = &env->extra_linked_bindings()->back(); | ||
| 660 | + if (prev_tail != nullptr) | ||
| 661 | + prev_tail->nm_link = &env->extra_linked_bindings()->back(); | ||
| 662 | 662 | } | |
| 663 | 663 | ||
| 664 | 664 | void AddLinkedBinding(Environment* env, const napi_module& mod) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -930,6 +930,11 @@ inline node_module* Environment::extra_linked_bindings_head() { | |||
| 930 | 930 | &extra_linked_bindings_.front() : nullptr; | |
| 931 | 931 | } | |
| 932 | 932 | ||
| 933 | + inline node_module* Environment::extra_linked_bindings_tail() { | ||
| 934 | + return extra_linked_bindings_.size() > 0 ? | ||
| 935 | + &extra_linked_bindings_.back() : nullptr; | ||
| 936 | + } | ||
| 937 | + | ||
| 933 | 938 | inline const Mutex& Environment::extra_linked_bindings_mutex() const { | |
| 934 | 939 | return extra_linked_bindings_mutex_; | |
| 935 | 940 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1208,6 +1208,7 @@ class Environment : public MemoryRetainer { | |||
| 1208 | 1208 | inline void set_stopping(bool value); | |
| 1209 | 1209 | inline std::list<node_module>* extra_linked_bindings(); | |
| 1210 | 1210 | inline node_module* extra_linked_bindings_head(); | |
| 1211 | + inline node_module* extra_linked_bindings_tail(); | ||
| 1211 | 1212 | inline const Mutex& extra_linked_bindings_mutex() const; | |
| 1212 | 1213 | ||
| 1213 | 1214 | inline bool filehandle_close_warning() const; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -190,3 +190,35 @@ TEST_F(LinkedBindingTest, LocallyDefinedLinkedBindingNapiInstanceDataTest) { | |||
| 190 | 190 | CHECK_EQ(*instance_data, 1); | |
| 191 | 191 | delete instance_data; | |
| 192 | 192 | } | |
| 193 | + | ||
| 194 | + TEST_F(LinkedBindingTest, ManyBindingsTest) { | ||
| 195 | + const v8::HandleScope handle_scope(isolate_); | ||
| 196 | + const Argv argv; | ||
| 197 | + Env test_env {handle_scope, argv}; | ||
| 198 | + | ||
| 199 | + int calls = 0; | ||
| 200 | + AddLinkedBinding(*test_env, "local_linked1", InitializeLocalBinding, &calls); | ||
| 201 | + AddLinkedBinding(*test_env, "local_linked2", InitializeLocalBinding, &calls); | ||
| 202 | + AddLinkedBinding(*test_env, "local_linked3", InitializeLocalBinding, &calls); | ||
| 203 | + AddLinkedBinding(*test_env, local_linked_napi); // Add a N-API addon as well. | ||
| 204 | + AddLinkedBinding(*test_env, "local_linked4", InitializeLocalBinding, &calls); | ||
| 205 | + AddLinkedBinding(*test_env, "local_linked5", InitializeLocalBinding, &calls); | ||
| 206 | + | ||
| 207 | + v8::Local<v8::Context> context = isolate_->GetCurrentContext(); | ||
| 208 | + | ||
| 209 | + const char* run_script = | ||
| 210 | + "for (let i = 1; i <= 5; i++)process._linkedBinding(`local_linked${i}`);" | ||
| 211 | + "process._linkedBinding('local_linked_napi').hello"; | ||
| 212 | + v8::Local<v8::Script> script = v8::Script::Compile( | ||
| 213 | + context, | ||
| 214 | + v8::String::NewFromOneByte(isolate_, | ||
| 215 | + reinterpret_cast<const uint8_t*>(run_script)) | ||
| 216 | + .ToLocalChecked()) | ||
| 217 | + .ToLocalChecked(); | ||
| 218 | + v8::Local<v8::Value> completion_value = script->Run(context).ToLocalChecked(); | ||
| 219 | + v8::String::Utf8Value utf8val(isolate_, completion_value); | ||
| 220 | + CHECK_NOT_NULL(*utf8val); | ||
| 221 | + CHECK_EQ(strcmp(*utf8val, "world"), 0); | ||
| 222 | + CHECK_EQ(calls, 5); | ||
| 223 | + } | ||
| 224 | + | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments