Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Side by Side Diff: runtime/vm/os_thread_win.cc

Issue 1429173003: Revert "Hack around TLS destructors firing after the process exits" (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/bin/run_vm_tests.cc ('k') | runtime/vm/thread_interrupter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/globals.h" // NOLINT 5 #include "platform/globals.h" // NOLINT
6 #if defined(TARGET_OS_WINDOWS) 6 #if defined(TARGET_OS_WINDOWS)
7 7
8 #include "vm/growable_array.h" 8 #include "vm/growable_array.h"
9 #include "vm/os_thread.h" 9 #include "vm/os_thread.h"
10 10
11 #include <process.h> // NOLINT 11 #include <process.h> // NOLINT
12 12
13 #include "platform/assert.h" 13 #include "platform/assert.h"
14 14
15 namespace dart { 15 namespace dart {
16 16
17 // This flag is flipped by platform_win.cc when the process is exiting.
18 // TODO(zra): Remove once VM shuts down cleanly.
19 bool private_flag_windows_run_tls_destructors = true;
20
21 class ThreadStartData { 17 class ThreadStartData {
22 public: 18 public:
23 ThreadStartData(OSThread::ThreadStartFunction function, uword parameter) 19 ThreadStartData(OSThread::ThreadStartFunction function, uword parameter)
24 : function_(function), parameter_(parameter) {} 20 : function_(function), parameter_(parameter) {}
25 21
26 OSThread::ThreadStartFunction function() const { return function_; } 22 OSThread::ThreadStartFunction function() const { return function_; }
27 uword parameter() const { return parameter_; } 23 uword parameter() const { return parameter_; }
28 24
29 private: 25 private:
30 OSThread::ThreadStartFunction function_; 26 OSThread::ThreadStartFunction function_;
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 627
632 #else // _WIN64 628 #else // _WIN64
633 629
634 #pragma comment(linker, "/INCLUDE:__tls_used") 630 #pragma comment(linker, "/INCLUDE:__tls_used")
635 #pragma comment(linker, "/INCLUDE:_p_thread_callback_dart") 631 #pragma comment(linker, "/INCLUDE:_p_thread_callback_dart")
636 632
637 #endif // _WIN64 633 #endif // _WIN64
638 634
639 // Static callback function to call with each thread termination. 635 // Static callback function to call with each thread termination.
640 void NTAPI OnDartThreadExit(PVOID module, DWORD reason, PVOID reserved) { 636 void NTAPI OnDartThreadExit(PVOID module, DWORD reason, PVOID reserved) {
641 if (!dart::private_flag_windows_run_tls_destructors) {
642 return;
643 }
644 // On XP SP0 & SP1, the DLL_PROCESS_ATTACH is never seen. It is sent on SP2+ 637 // On XP SP0 & SP1, the DLL_PROCESS_ATTACH is never seen. It is sent on SP2+
645 // and on W2K and W2K3. So don't assume it is sent. 638 // and on W2K and W2K3. So don't assume it is sent.
646 if (DLL_THREAD_DETACH == reason || DLL_PROCESS_DETACH == reason) { 639 if (DLL_THREAD_DETACH == reason || DLL_PROCESS_DETACH == reason) {
647 dart::ThreadLocalData::RunDestructors(); 640 dart::ThreadLocalData::RunDestructors();
648 dart::MonitorWaitData::ThreadExit(); 641 dart::MonitorWaitData::ThreadExit();
649 } 642 }
650 } 643 }
651 644
652 // .CRT$XLA to .CRT$XLZ is an array of PIMAGE_TLS_CALLBACK pointers that are 645 // .CRT$XLA to .CRT$XLZ is an array of PIMAGE_TLS_CALLBACK pointers that are
653 // called automatically by the OS loader code (not the CRT) when the module is 646 // called automatically by the OS loader code (not the CRT) when the module is
(...skipping 30 matching lines...) Expand all
684 #pragma data_seg(".CRT$XLB") 677 #pragma data_seg(".CRT$XLB")
685 PIMAGE_TLS_CALLBACK p_thread_callback_dart = OnDartThreadExit; 678 PIMAGE_TLS_CALLBACK p_thread_callback_dart = OnDartThreadExit;
686 679
687 // Reset the default section. 680 // Reset the default section.
688 #pragma data_seg() 681 #pragma data_seg()
689 682
690 #endif // _WIN64 683 #endif // _WIN64
691 } // extern "C" 684 } // extern "C"
692 685
693 #endif // defined(TARGET_OS_WINDOWS) 686 #endif // defined(TARGET_OS_WINDOWS)
OLDNEW
« no previous file with comments | « runtime/bin/run_vm_tests.cc ('k') | runtime/vm/thread_interrupter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698