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

Side by Side Diff: src/trusted/service_runtime/sel_main_chrome.c

Issue 1089323006: Add a load_status callback hook that is invoked at the end of chrome LoadApp. (Closed) Base URL: https://chromium.googlesource.com/native_client/src/native_client.git@master
Patch Set: xyz Created 5 years, 8 months 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 | « src/public/chrome_main.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "native_client/src/public/chrome_main.h" 7 #include "native_client/src/public/chrome_main.h"
8 8
9 #include "native_client/src/include/build_config.h" 9 #include "native_client/src/include/build_config.h"
10 #include "native_client/src/include/portability.h" 10 #include "native_client/src/include/portability.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 #endif 100 #endif
101 #if NACL_WINDOWS 101 #if NACL_WINDOWS
102 args->debug_stub_server_port_selected_handler_func = NULL; 102 args->debug_stub_server_port_selected_handler_func = NULL;
103 #endif 103 #endif
104 args->create_memory_object_func = NULL; 104 args->create_memory_object_func = NULL;
105 args->validation_cache = NULL; 105 args->validation_cache = NULL;
106 #if NACL_WINDOWS 106 #if NACL_WINDOWS
107 args->broker_duplicate_handle_func = NULL; 107 args->broker_duplicate_handle_func = NULL;
108 args->attach_debug_exception_handler_func = NULL; 108 args->attach_debug_exception_handler_func = NULL;
109 #endif 109 #endif
110 args->load_status_handler_func = NULL;
110 #if NACL_LINUX || NACL_OSX 111 #if NACL_LINUX || NACL_OSX
111 args->number_of_cores = -1; /* unknown */ 112 args->number_of_cores = -1; /* unknown */
112 #endif 113 #endif
113 #if NACL_LINUX 114 #if NACL_LINUX
114 args->prereserved_sandbox_size = 0; 115 args->prereserved_sandbox_size = 0;
115 #endif 116 #endif
116 args->nexe_desc = NULL; 117 args->nexe_desc = NULL;
117 118
118 args->argc = default_argc; 119 args->argc = default_argc;
119 args->argv = (char **) default_argv; 120 args->argv = (char **) default_argv;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 if (!NaClDebugInit(nap)) { 365 if (!NaClDebugInit(nap)) {
365 goto done; 366 goto done;
366 } 367 }
367 #if NACL_WINDOWS 368 #if NACL_WINDOWS
368 if (NULL != args->debug_stub_server_port_selected_handler_func) { 369 if (NULL != args->debug_stub_server_port_selected_handler_func) {
369 args->debug_stub_server_port_selected_handler_func(nap->debug_stub_port); 370 args->debug_stub_server_port_selected_handler_func(nap->debug_stub_port);
370 } 371 }
371 #endif 372 #endif
372 } 373 }
373 374
375 if (args->load_status_handler_func != NULL) {
376 args->load_status_handler_func(LOAD_OK);
377 }
374 return LOAD_OK; 378 return LOAD_OK;
375 379
376 done: 380 done:
377 fflush(stdout); 381 fflush(stdout);
378 382
379 /* 383 /*
384 * If there is a load status callback, call that now and transfer logs
385 * in preparation for process exit.
386 */
387 if (args->load_status_handler_func != NULL) {
388 /* Don't return LOAD_OK if we had some failure loading. */
389 if (LOAD_OK == errcode) {
390 errcode = LOAD_INTERNAL;
391 }
392 args->load_status_handler_func(errcode);
393 NaClLog(LOG_ERROR, "NaCl LoadApp failed. Transferring logs before exit.\n");
394 NaClLogRunAbortBehavior();
395 /* Fall through and run NaClBlockIfCommandChannelExists.
Mark Seaborn 2015/04/21 16:41:23 Nit: Use the NaCl style for multiline comments, wi
jvoung (off chromium) 2015/04/21 17:10:09 Done.
396 * TODO(jvoung): remove NaClBlockIfCommandChannelExists() and use the
397 * callback to indicate the load_status after Chromium no longer calls
398 * start_module. We also need to change Chromium so that it does not
399 * attempt to set up the command channel if there is a known load error.
400 * Otherwise there is a race between this processes's exit / load error
Mark Seaborn 2015/04/21 16:41:23 "process's"
jvoung (off chromium) 2015/04/21 17:10:09 Done.
401 * reporting, and the command channel setup on the Chromium side (plus
402 * the associated reporting). Thus this could end up with two different
403 * load errors being reported (1) the real load error from here, and
404 * (2) the command channel setup failure because the process exited in
405 * the middle of setting up the command channel.
406 */
407 }
408 /*
380 * If there is a secure command channel, we sent an RPC reply with 409 * If there is a secure command channel, we sent an RPC reply with
381 * the reason that the nexe was rejected. If we exit now, that 410 * the reason that the nexe was rejected. If we exit now, that
382 * reply may still be in-flight and the various channel closure (esp 411 * reply may still be in-flight and the various channel closure (esp
383 * reverse channel) may be detected first. This would result in a 412 * reverse channel) may be detected first. This would result in a
384 * crash being reported, rather than the error in the RPC reply. 413 * crash being reported, rather than the error in the RPC reply.
385 * Instead, we wait for the hard-shutdown on the command channel. 414 * Instead, we wait for the hard-shutdown on the command channel.
386 */ 415 */
387 if (LOAD_OK != errcode) { 416 if (LOAD_OK != errcode) {
388 NaClBlockIfCommandChannelExists(nap); 417 NaClBlockIfCommandChannelExists(nap);
389 } else { 418 } else {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 int NaClChromeMainStart(struct NaClApp *nap, 467 int NaClChromeMainStart(struct NaClApp *nap,
439 struct NaClChromeMainArgs *args, 468 struct NaClChromeMainArgs *args,
440 int *exit_status) { 469 int *exit_status) {
441 int load_ok = LOAD_OK == LoadApp(nap, args); 470 int load_ok = LOAD_OK == LoadApp(nap, args);
442 if (load_ok) { 471 if (load_ok) {
443 *exit_status = StartApp(nap, args); 472 *exit_status = StartApp(nap, args);
444 } 473 }
445 free(args); 474 free(args);
446 return load_ok; 475 return load_ok;
447 } 476 }
OLDNEW
« no previous file with comments | « src/public/chrome_main.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698