OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "components/nacl/renderer/plugin/pnacl_translate_thread.h" | 5 #include "components/nacl/renderer/plugin/pnacl_translate_thread.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 #include <sstream> | 8 #include <sstream> |
9 | 9 |
10 #include "components/nacl/renderer/plugin/plugin.h" | 10 #include "components/nacl/renderer/plugin/plugin.h" |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 NaClXMutexUnlock(&cond_mu_); | 183 NaClXMutexUnlock(&cond_mu_); |
184 } | 184 } |
185 | 185 |
186 void WINAPI PnaclTranslateThread::DoCompileThread(void* arg) { | 186 void WINAPI PnaclTranslateThread::DoCompileThread(void* arg) { |
187 PnaclTranslateThread* translator = | 187 PnaclTranslateThread* translator = |
188 reinterpret_cast<PnaclTranslateThread*>(arg); | 188 reinterpret_cast<PnaclTranslateThread*>(arg); |
189 translator->DoCompile(); | 189 translator->DoCompile(); |
190 } | 190 } |
191 | 191 |
192 void PnaclTranslateThread::DoCompile() { | 192 void PnaclTranslateThread::DoCompile() { |
193 // If the main thread asked us to exit in between starting the thread | |
194 // and now, just leave now. | |
195 { | 193 { |
196 nacl::MutexLocker ml(&subprocess_mu_); | 194 nacl::MutexLocker ml(&subprocess_mu_); |
| 195 // If the main thread asked us to exit in between starting the thread |
| 196 // and now, just leave now. |
197 if (!compiler_subprocess_active_) | 197 if (!compiler_subprocess_active_) |
198 return; | 198 return; |
199 } | 199 // Now that we are in helper thread, we can do the the blocking |
200 | 200 // StartSrpcServices operation. |
201 // Now that we are in helper thread, we can do the the blocking | 201 if (!compiler_subprocess_->StartSrpcServices()) { |
202 // StartSrpcServices operation. | 202 TranslateFailed( |
203 if (!compiler_subprocess_->StartSrpcServices()) { | 203 PP_NACL_ERROR_SRPC_CONNECTION_FAIL, |
204 TranslateFailed( | 204 "SRPC connection failure for " + compiler_subprocess_->description()); |
205 PP_NACL_ERROR_SRPC_CONNECTION_FAIL, | 205 return; |
206 "SRPC connection failure for " + compiler_subprocess_->description()); | 206 } |
207 return; | |
208 } | 207 } |
209 | 208 |
210 SrpcParams params; | 209 SrpcParams params; |
211 std::vector<nacl::DescWrapper*> compile_out_files; | 210 std::vector<nacl::DescWrapper*> compile_out_files; |
212 size_t i; | 211 size_t i; |
213 for (i = 0; i < obj_files_->size(); i++) | 212 for (i = 0; i < obj_files_->size(); i++) |
214 compile_out_files.push_back((*obj_files_)[i]->write_wrapper()); | 213 compile_out_files.push_back((*obj_files_)[i]->write_wrapper()); |
215 for (; i < PnaclCoordinator::kMaxTranslatorObjectFiles; i++) | 214 for (; i < PnaclCoordinator::kMaxTranslatorObjectFiles; i++) |
216 compile_out_files.push_back(invalid_desc_wrapper_); | 215 compile_out_files.push_back(invalid_desc_wrapper_); |
217 | 216 |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 core->CallOnMainThread(0, compile_finished_callback_, PP_OK); | 330 core->CallOnMainThread(0, compile_finished_callback_, PP_OK); |
332 } | 331 } |
333 | 332 |
334 void WINAPI PnaclTranslateThread::DoLinkThread(void* arg) { | 333 void WINAPI PnaclTranslateThread::DoLinkThread(void* arg) { |
335 PnaclTranslateThread* translator = | 334 PnaclTranslateThread* translator = |
336 reinterpret_cast<PnaclTranslateThread*>(arg); | 335 reinterpret_cast<PnaclTranslateThread*>(arg); |
337 translator->DoLink(); | 336 translator->DoLink(); |
338 } | 337 } |
339 | 338 |
340 void PnaclTranslateThread::DoLink() { | 339 void PnaclTranslateThread::DoLink() { |
341 // If the main thread asked us to exit in between starting the thread | |
342 // and now, just leave now. | |
343 { | 340 { |
344 nacl::MutexLocker ml(&subprocess_mu_); | 341 nacl::MutexLocker ml(&subprocess_mu_); |
| 342 // If the main thread asked us to exit in between starting the thread |
| 343 // and now, just leave now. |
345 if (!ld_subprocess_active_) | 344 if (!ld_subprocess_active_) |
346 return; | 345 return; |
347 } | 346 // Now that we are in helper thread, we can do the the blocking |
348 | 347 // StartSrpcServices operation. |
349 // Now that we are in helper thread, we can do the the blocking | 348 if (!ld_subprocess_->StartSrpcServices()) { |
350 // StartSrpcServices operation. | 349 TranslateFailed( |
351 if (!ld_subprocess_->StartSrpcServices()) { | 350 PP_NACL_ERROR_SRPC_CONNECTION_FAIL, |
352 TranslateFailed( | 351 "SRPC connection failure for " + ld_subprocess_->description()); |
353 PP_NACL_ERROR_SRPC_CONNECTION_FAIL, | 352 return; |
354 "SRPC connection failure for " + ld_subprocess_->description()); | 353 } |
355 return; | |
356 } | 354 } |
357 | 355 |
358 SrpcParams params; | 356 SrpcParams params; |
359 std::vector<nacl::DescWrapper*> ld_in_files; | 357 std::vector<nacl::DescWrapper*> ld_in_files; |
360 size_t i; | 358 size_t i; |
361 for (i = 0; i < obj_files_->size(); i++) { | 359 for (i = 0; i < obj_files_->size(); i++) { |
362 // Reset object file for reading first. | 360 // Reset object file for reading first. |
363 if (!(*obj_files_)[i]->Reset()) { | 361 if (!(*obj_files_)[i]->Reset()) { |
364 TranslateFailed(PP_NACL_ERROR_PNACL_LD_SETUP, | 362 TranslateFailed(PP_NACL_ERROR_PNACL_LD_SETUP, |
365 "Link process could not reset object file"); | 363 "Link process could not reset object file"); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 AbortSubprocesses(); | 456 AbortSubprocesses(); |
459 if (translate_thread_ != NULL) | 457 if (translate_thread_ != NULL) |
460 NaClThreadJoin(translate_thread_.get()); | 458 NaClThreadJoin(translate_thread_.get()); |
461 PLUGIN_PRINTF(("~PnaclTranslateThread joined\n")); | 459 PLUGIN_PRINTF(("~PnaclTranslateThread joined\n")); |
462 NaClCondVarDtor(&buffer_cond_); | 460 NaClCondVarDtor(&buffer_cond_); |
463 NaClMutexDtor(&cond_mu_); | 461 NaClMutexDtor(&cond_mu_); |
464 NaClMutexDtor(&subprocess_mu_); | 462 NaClMutexDtor(&subprocess_mu_); |
465 } | 463 } |
466 | 464 |
467 } // namespace plugin | 465 } // namespace plugin |
OLD | NEW |