| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "base/win/wait_chain.h" | 5 #include "base/win/wait_chain.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 | 183 |
| 184 // Start a child process and passes the |mutex| and the |sync_event| to the | 184 // Start a child process and passes the |mutex| and the |sync_event| to the |
| 185 // command line. | 185 // command line. |
| 186 Process StartChildProcess(HANDLE mutex, HANDLE sync_event) { | 186 Process StartChildProcess(HANDLE mutex, HANDLE sync_event) { |
| 187 CommandLine command_line = GetMultiProcessTestChildBaseCommandLine(); | 187 CommandLine command_line = GetMultiProcessTestChildBaseCommandLine(); |
| 188 | 188 |
| 189 AppendSwitchHandle(&command_line, "mutex", mutex); | 189 AppendSwitchHandle(&command_line, "mutex", mutex); |
| 190 AppendSwitchHandle(&command_line, "sync_event", sync_event); | 190 AppendSwitchHandle(&command_line, "sync_event", sync_event); |
| 191 | 191 |
| 192 LaunchOptions options; | 192 LaunchOptions options; |
| 193 HandlesToInheritVector handle_vector; | 193 options.handles_to_inherit.push_back(mutex); |
| 194 handle_vector.push_back(mutex); | 194 options.handles_to_inherit.push_back(sync_event); |
| 195 handle_vector.push_back(sync_event); | |
| 196 options.handles_to_inherit = &handle_vector; | |
| 197 base::SpawnChildResult spawn_result = | 195 base::SpawnChildResult spawn_result = |
| 198 SpawnMultiProcessTestChild("WaitChainTestProc", command_line, options); | 196 SpawnMultiProcessTestChild("WaitChainTestProc", command_line, options); |
| 199 return std::move(spawn_result.process); | 197 return std::move(spawn_result.process); |
| 200 } | 198 } |
| 201 | 199 |
| 202 // Returns true if the |wait_chain| is an alternating sequence of thread objects | 200 // Returns true if the |wait_chain| is an alternating sequence of thread objects |
| 203 // and synchronization objects. | 201 // and synchronization objects. |
| 204 bool WaitChainStructureIsCorrect(const WaitChainNodeVector& wait_chain) { | 202 bool WaitChainStructureIsCorrect(const WaitChainNodeVector& wait_chain) { |
| 205 // Checks thread objects. | 203 // Checks thread objects. |
| 206 for (size_t i = 0; i < wait_chain.size(); i += 2) { | 204 for (size_t i = 0; i < wait_chain.size(); i += 2) { |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 // Unblock child process and wait for it to terminate. | 309 // Unblock child process and wait for it to terminate. |
| 312 ASSERT_TRUE(::SetEvent(sync_event.Get())); | 310 ASSERT_TRUE(::SetEvent(sync_event.Get())); |
| 313 ASSERT_TRUE(child_process.WaitForExit(nullptr)); | 311 ASSERT_TRUE(child_process.WaitForExit(nullptr)); |
| 314 | 312 |
| 315 // The SimpleThread API expect Join() to be called before destruction. | 313 // The SimpleThread API expect Join() to be called before destruction. |
| 316 waiting_thread_3->Join(); | 314 waiting_thread_3->Join(); |
| 317 } | 315 } |
| 318 | 316 |
| 319 } // namespace win | 317 } // namespace win |
| 320 } // namespace base | 318 } // namespace base |
| OLD | NEW |