OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // The memory_watcher.dll is hooked by simply linking it. When we get the | 5 // The memory_watcher.dll is hooked by simply linking it. When we get the |
6 // windows notification that this DLL is loaded, we do a few things: | 6 // windows notification that this DLL is loaded, we do a few things: |
7 // 1) Register a Hot Key. | 7 // 1) Register a Hot Key. |
8 // Only one process can hook the Hot Key, so one will get it, and the | 8 // Only one process can hook the Hot Key, so one will get it, and the |
9 // others will silently fail. | 9 // others will silently fail. |
10 // 2) Create a thread to wait on an event. | 10 // 2) Create a thread to wait on an event. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 // Thread for watching for key events. | 53 // Thread for watching for key events. |
54 DWORD WINAPI ThreadMain(LPVOID) { | 54 DWORD WINAPI ThreadMain(LPVOID) { |
55 bool stopping = false; | 55 bool stopping = false; |
56 HANDLE events[2] = { g_dump_event, g_quit_event }; | 56 HANDLE events[2] = { g_dump_event, g_quit_event }; |
57 while (!stopping) { | 57 while (!stopping) { |
58 DWORD rv = WaitForMultipleObjects(2, events, FALSE, INFINITE); | 58 DWORD rv = WaitForMultipleObjects(2, events, FALSE, INFINITE); |
59 switch (rv) { | 59 switch (rv) { |
60 case WAIT_OBJECT_0: | 60 case WAIT_OBJECT_0: |
61 if (g_memory_watcher) { | 61 if (g_memory_watcher) { |
62 g_memory_watcher->DumpLeaks(); | 62 g_memory_watcher->DumpLeaks(); |
63 // After dumping, we teardown. | |
64 ExitProcess(0); | |
65 } | 63 } |
| 64 stopping = true; |
66 break; | 65 break; |
67 case WAIT_OBJECT_0 + 1: | 66 case WAIT_OBJECT_0 + 1: |
68 stopping = true; | 67 stopping = true; |
69 break; | 68 break; |
70 default: | 69 default: |
71 NOTREACHED(); | 70 NOTREACHED(); |
72 break; | 71 break; |
73 } | 72 } |
74 } | 73 } |
75 return 0; | 74 return 0; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 break; | 135 break; |
137 } | 136 } |
138 return TRUE; | 137 return TRUE; |
139 } | 138 } |
140 | 139 |
141 __declspec(dllexport) void __cdecl SetLogName(char* name) { | 140 __declspec(dllexport) void __cdecl SetLogName(char* name) { |
142 g_memory_watcher->SetLogName(name); | 141 g_memory_watcher->SetLogName(name); |
143 } | 142 } |
144 | 143 |
145 } // extern "C" | 144 } // extern "C" |
OLD | NEW |