| Index: mojo/edk/embedder/embedder.cc
|
| diff --git a/mojo/edk/embedder/embedder.cc b/mojo/edk/embedder/embedder.cc
|
| index 5cf70e5f416231880109c0ea5aedaabb324b7711..f4ef70617ace50993e9a7580528e6148a2320d5d 100644
|
| --- a/mojo/edk/embedder/embedder.cc
|
| +++ b/mojo/edk/embedder/embedder.cc
|
| @@ -22,21 +22,16 @@
|
| #include "mojo/edk/system/core.h"
|
|
|
| #if !defined(OS_NACL)
|
| +#include "base/debug/stack_trace.h"
|
| #include "crypto/random.h"
|
| #endif
|
|
|
| namespace mojo {
|
| namespace edk {
|
| -
|
| -class Core;
|
| -class PlatformSupport;
|
| -
|
| namespace internal {
|
|
|
| -Core* g_core;
|
| -ProcessDelegate* g_process_delegate;
|
| -
|
| -Core* GetCore() { return g_core; }
|
| +Core* g_core = nullptr;
|
| +ProcessDelegate* g_process_delegate = nullptr;
|
|
|
| } // namespace internal
|
|
|
| @@ -98,7 +93,13 @@ void Init() {
|
| MojoSystemThunks thunks = MakeSystemThunks();
|
| size_t expected_size = MojoEmbedderSetSystemThunks(&thunks);
|
| DCHECK_EQ(expected_size, sizeof(thunks));
|
| -
|
| +#if defined(OS_NACL) || 1
|
| + DCHECK(!internal::g_core) << "No nacl stack trace.";
|
| +#else
|
| + static std::string prev_stack;
|
| + DCHECK(!internal::g_core) << prev_stack << "\nEndOfPrevStack";
|
| + prev_stack = base::debug::StackTrace().ToString();
|
| +#endif
|
| internal::g_core = new Core();
|
| }
|
|
|
| @@ -140,6 +141,13 @@ MojoResult PassSharedMemoryHandle(
|
| void InitIPCSupport(ProcessDelegate* process_delegate,
|
| scoped_refptr<base::TaskRunner> io_thread_task_runner) {
|
| CHECK(internal::g_core);
|
| +#if defined(OS_NACL) || 1
|
| + DCHECK(!internal::g_process_delegate) << "No stack trace on NaCl";
|
| +#else
|
| + static std::string prev_stack;
|
| + DCHECK(!internal::g_process_delegate) << prev_stack << "\nEndOfPrevStack";
|
| + prev_stack = base::debug::StackTrace().ToString();
|
| +#endif
|
| internal::g_core->SetIOTaskRunner(io_thread_task_runner);
|
| internal::g_process_delegate = process_delegate;
|
| }
|
| @@ -150,6 +158,7 @@ void ShutdownIPCSupport() {
|
| internal::g_core->RequestShutdown(
|
| base::Bind(&ProcessDelegate::OnShutdownComplete,
|
| base::Unretained(internal::g_process_delegate)));
|
| + internal::g_process_delegate = nullptr;
|
| }
|
|
|
| #if defined(OS_MACOSX) && !defined(OS_IOS)
|
| @@ -161,18 +170,18 @@ void SetMachPortProvider(base::PortProvider* port_provider) {
|
|
|
| ScopedMessagePipeHandle CreateMessagePipe(
|
| ScopedPlatformHandle platform_handle) {
|
| - CHECK(internal::g_process_delegate);
|
| + CHECK(internal::g_core);
|
| return internal::g_core->CreateMessagePipe(std::move(platform_handle));
|
| }
|
|
|
| ScopedMessagePipeHandle CreateParentMessagePipe(
|
| const std::string& token, const std::string& child_token) {
|
| - CHECK(internal::g_process_delegate);
|
| + CHECK(internal::g_core);
|
| return internal::g_core->CreateParentMessagePipe(token, child_token);
|
| }
|
|
|
| ScopedMessagePipeHandle CreateChildMessagePipe(const std::string& token) {
|
| - CHECK(internal::g_process_delegate);
|
| + CHECK(internal::g_core);
|
| return internal::g_core->CreateChildMessagePipe(token);
|
| }
|
|
|
|
|