| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 /* | 7 /* |
| 8 * NaCl Simple/secure ELF loader (NaCl SEL). | 8 * NaCl Simple/secure ELF loader (NaCl SEL). |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 return addr < nap->static_text_end; | 477 return addr < nap->static_text_end; |
| 478 } | 478 } |
| 479 | 479 |
| 480 int NaClAppLaunchServiceThreads(struct NaClApp *nap) { | 480 int NaClAppLaunchServiceThreads(struct NaClApp *nap) { |
| 481 struct NaClKernelService *kernel_service = NULL; | 481 struct NaClKernelService *kernel_service = NULL; |
| 482 int rv = 0; | 482 int rv = 0; |
| 483 | 483 |
| 484 NaClLog(4, "NaClAppLaunchServiceThreads: Entered, nap 0x%"NACL_PRIxPTR"\n", | 484 NaClLog(4, "NaClAppLaunchServiceThreads: Entered, nap 0x%"NACL_PRIxPTR"\n", |
| 485 (uintptr_t) nap); | 485 (uintptr_t) nap); |
| 486 | 486 |
| 487 NaClNameServiceLaunch(nap->name_service); | |
| 488 | |
| 489 if (LOAD_OK != NaClWaitForStartModuleCommand(nap)) { | 487 if (LOAD_OK != NaClWaitForStartModuleCommand(nap)) { |
| 490 return rv; | 488 return rv; |
| 491 } | 489 } |
| 492 | 490 |
| 493 NaClXMutexLock(&nap->mu); | 491 NaClXMutexLock(&nap->mu); |
| 494 if (NULL == nap->runtime_host_interface) { | 492 if (NULL == nap->runtime_host_interface) { |
| 495 nap->runtime_host_interface = malloc(sizeof *nap->runtime_host_interface); | 493 nap->runtime_host_interface = malloc(sizeof *nap->runtime_host_interface); |
| 496 if (NULL == nap->runtime_host_interface || | 494 if (NULL == nap->runtime_host_interface || |
| 497 !NaClRuntimeHostInterfaceCtor_protected(nap->runtime_host_interface)) { | 495 !NaClRuntimeHostInterfaceCtor_protected(nap->runtime_host_interface)) { |
| 498 NaClLog(LOG_ERROR, "NaClAppLaunchServiceThreads:" | 496 NaClLog(LOG_ERROR, "NaClAppLaunchServiceThreads:" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 | 533 |
| 536 NaClXMutexLock(&nap->mu); | 534 NaClXMutexLock(&nap->mu); |
| 537 CHECK(NULL == nap->kernel_service); | 535 CHECK(NULL == nap->kernel_service); |
| 538 | 536 |
| 539 nap->kernel_service = kernel_service; | 537 nap->kernel_service = kernel_service; |
| 540 kernel_service = NULL; | 538 kernel_service = NULL; |
| 541 NaClXMutexUnlock(&nap->mu); | 539 NaClXMutexUnlock(&nap->mu); |
| 542 rv = 1; | 540 rv = 1; |
| 543 | 541 |
| 544 done: | 542 done: |
| 545 NaClXMutexLock(&nap->mu); | |
| 546 if (NULL != nap->kernel_service) { | |
| 547 NaClLog(3, | |
| 548 ("NaClAppLaunchServiceThreads: adding kernel service to" | |
| 549 " name service\n")); | |
| 550 (*NACL_VTBL(NaClNameService, nap->name_service)-> | |
| 551 CreateDescEntry)(nap->name_service, | |
| 552 "KernelService", NACL_ABI_O_RDWR, | |
| 553 NaClDescRef(nap->kernel_service->base.bound_and_cap[1])); | |
| 554 } | |
| 555 NaClXMutexUnlock(&nap->mu); | |
| 556 | |
| 557 /* | 543 /* |
| 558 * Single exit path. | 544 * Single exit path. |
| 559 * | 545 * |
| 560 * Error cleanup invariant. No service thread should be running | 546 * Error cleanup invariant. No service thread should be running |
| 561 * (modulo asynchronous shutdown). Automatic variables refer to | 547 * (modulo asynchronous shutdown). Automatic variables refer to |
| 562 * fully constructed objects if non-NULL, and when ownership is | 548 * fully constructed objects if non-NULL, and when ownership is |
| 563 * transferred to the NaClApp object the corresponding automatic | 549 * transferred to the NaClApp object the corresponding automatic |
| 564 * variable is set to NULL. | 550 * variable is set to NULL. |
| 565 */ | 551 */ |
| 566 NaClRefCountSafeUnref((struct NaClRefCount *) kernel_service); | 552 NaClRefCountSafeUnref((struct NaClRefCount *) kernel_service); |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 NaClSysToUserStackAddr(nap, sys_stack_ptr), | 851 NaClSysToUserStackAddr(nap, sys_stack_ptr), |
| 866 user_tls1, | 852 user_tls1, |
| 867 user_tls2)) { | 853 user_tls2)) { |
| 868 NaClLog(LOG_WARNING, | 854 NaClLog(LOG_WARNING, |
| 869 ("NaClCreateAdditionalThread: could not allocate thread." | 855 ("NaClCreateAdditionalThread: could not allocate thread." |
| 870 " Returning EAGAIN per POSIX specs.\n")); | 856 " Returning EAGAIN per POSIX specs.\n")); |
| 871 return -NACL_ABI_EAGAIN; | 857 return -NACL_ABI_EAGAIN; |
| 872 } | 858 } |
| 873 return 0; | 859 return 0; |
| 874 } | 860 } |
| OLD | NEW |