| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 44968f0 commit 5f4535a
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1354,10 +1354,10 @@ static void sanity_check(void*) { | |||
| 1354 | 1354 | } | |
| 1355 | 1355 | ||
| 1356 | 1356 | void init(Local<Object> exports) { | |
| 1357 | + AtExit(sanity_check); | ||
| 1357 | 1358 | AtExit(at_exit_cb2, cookie); | |
| 1358 | 1359 | AtExit(at_exit_cb2, cookie); | |
| 1359 | 1360 | AtExit(at_exit_cb1, exports->GetIsolate()); | |
| 1360 | - AtExit(sanity_check); | ||
| 1361 | 1361 | } | |
| 1362 | 1362 | ||
| 1363 | 1363 | NODE_MODULE(NODE_GYP_MODULE_NAME, init) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -637,7 +637,7 @@ void Environment::RunAtExitCallbacks() { | |||
| 637 | 637 | } | |
| 638 | 638 | ||
| 639 | 639 | void Environment::AtExit(void (*cb)(void* arg), void* arg) { | |
| 640 | - at_exit_functions_.push_back(ExitCallback{cb, arg}); | ||
| 640 | + at_exit_functions_.push_front(ExitCallback{cb, arg}); | ||
| 641 | 641 | } | |
| 642 | 642 | ||
| 643 | 643 | void Environment::RunAndClearNativeImmediates() { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -10,8 +10,12 @@ using node::RunAtExit; | |||
| 10 | 10 | ||
| 11 | 11 | static bool called_cb_1 = false; | |
| 12 | 12 | static bool called_cb_2 = false; | |
| 13 | + static bool called_cb_ordered_1 = false; | ||
| 14 | + static bool called_cb_ordered_2 = false; | ||
| 13 | 15 | static void at_exit_callback1(void* arg); | |
| 14 | 16 | static void at_exit_callback2(void* arg); | |
| 17 | + static void at_exit_callback_ordered1(void* arg); | ||
| 18 | + static void at_exit_callback_ordered2(void* arg); | ||
| 15 | 19 | static std::string cb_1_arg; // NOLINT(runtime/string) | |
| 16 | 20 | ||
| 17 | 21 | class EnvironmentTest : public EnvironmentTestFixture { | |
@@ -20,6 +24,8 @@ class EnvironmentTest : public EnvironmentTestFixture { | |||
| 20 | 24 | NodeTestFixture::TearDown(); | |
| 21 | 25 | called_cb_1 = false; | |
| 22 | 26 | called_cb_2 = false; | |
| 27 | + called_cb_ordered_1 = false; | ||
| 28 | + called_cb_ordered_2 = false; | ||
| 23 | 29 | } | |
| 24 | 30 | }; | |
| 25 | 31 | ||
@@ -61,6 +67,19 @@ TEST_F(EnvironmentTest, AtExitWithoutEnvironment) { | |||
| 61 | 67 | EXPECT_TRUE(called_cb_1); | |
| 62 | 68 | } | |
| 63 | 69 | ||
| 70 | + TEST_F(EnvironmentTest, AtExitOrder) { | ||
| 71 | + const v8::HandleScope handle_scope(isolate_); | ||
| 72 | + const Argv argv; | ||
| 73 | + Env env {handle_scope, argv}; | ||
| 74 | + | ||
| 75 | + // Test that callbacks are run in reverse order. | ||
| 76 | + AtExit(*env, at_exit_callback_ordered1); | ||
| 77 | + AtExit(*env, at_exit_callback_ordered2); | ||
| 78 | + RunAtExit(*env); | ||
| 79 | + EXPECT_TRUE(called_cb_ordered_1); | ||
| 80 | + EXPECT_TRUE(called_cb_ordered_2); | ||
| 81 | + } | ||
| 82 | + | ||
| 64 | 83 | TEST_F(EnvironmentTest, AtExitWithArgument) { | |
| 65 | 84 | const v8::HandleScope handle_scope(isolate_); | |
| 66 | 85 | const Argv argv; | |
@@ -134,3 +153,13 @@ static void at_exit_callback1(void* arg) { | |||
| 134 | 153 | static void at_exit_callback2(void* arg) { | |
| 135 | 154 | called_cb_2 = true; | |
| 136 | 155 | } | |
| 156 | + | ||
| 157 | + static void at_exit_callback_ordered1(void* arg) { | ||
| 158 | + EXPECT_TRUE(called_cb_ordered_2); | ||
| 159 | + called_cb_ordered_1 = true; | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + static void at_exit_callback_ordered2(void* arg) { | ||
| 163 | + EXPECT_FALSE(called_cb_ordered_1); | ||
| 164 | + called_cb_ordered_2 = true; | ||
| 165 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments