OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2011 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/trusted/plugin/service_runtime.h" | 7 #include "native_client/src/trusted/plugin/service_runtime.h" |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 #include <map> | 10 #include <map> |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 if (p == NULL) { | 63 if (p == NULL) { |
64 NaClLog(1, "LogToJavaScriptConsole: Weak ref died\n"); | 64 NaClLog(1, "LogToJavaScriptConsole: Weak ref died\n"); |
65 return; | 65 return; |
66 } | 66 } |
67 NaClLog(1, "LogToJavaScriptConsole: Weak ref okay: %p\n", | 67 NaClLog(1, "LogToJavaScriptConsole: Weak ref okay: %p\n", |
68 reinterpret_cast<void*>(p.get())); | 68 reinterpret_cast<void*>(p.get())); |
69 p->plugin->browser_interface()->AddToConsole(p->plugin->instance_id(), | 69 p->plugin->browser_interface()->AddToConsole(p->plugin->instance_id(), |
70 p->message); | 70 p->message); |
71 } | 71 } |
72 | 72 |
73 void LogToJavaScriptConsoleInterface::Log(nacl::string message) { | 73 void PluginReverseInterface::Log(nacl::string message) { |
74 (void) WeakRefCompletionCallback(anchor_, 0, | 74 (void) WeakRefCompletionCallback(anchor_, 0, |
75 LogToJavaScriptConsole, | 75 LogToJavaScriptConsole, |
76 new LogToJavaScriptConsoleResource( | 76 new LogToJavaScriptConsoleResource( |
77 message, plugin_)); | 77 message, plugin_)); |
78 } | 78 } |
79 | 79 |
80 ServiceRuntime::ServiceRuntime(Plugin* plugin) | 80 ServiceRuntime::ServiceRuntime(Plugin* plugin) |
81 : default_socket_address_(NULL), | 81 : default_socket_address_(NULL), |
82 plugin_(plugin), | 82 plugin_(plugin), |
83 browser_interface_(plugin->browser_interface()), | 83 browser_interface_(plugin->browser_interface()), |
84 runtime_channel_(NULL), | 84 runtime_channel_(NULL), |
85 reverse_service_(NULL), | 85 reverse_service_(NULL), |
86 subprocess_(NULL), | 86 subprocess_(NULL), |
87 async_receive_desc_(NULL), | 87 async_receive_desc_(NULL), |
88 async_send_desc_(NULL), | 88 async_send_desc_(NULL), |
89 anchor_(new nacl::WeakRefAnchor()), | 89 anchor_(new nacl::WeakRefAnchor()), |
90 log_interface_(new LogToJavaScriptConsoleInterface(anchor_, plugin)) { | 90 rev_interface_(new PluginReverseInterface(anchor_, plugin)) { |
91 } | 91 } |
92 | 92 |
93 bool ServiceRuntime::InitCommunication(nacl::Handle bootstrap_socket, | 93 bool ServiceRuntime::InitCommunication(nacl::Handle bootstrap_socket, |
94 nacl::DescWrapper* nacl_desc, | 94 nacl::DescWrapper* nacl_desc, |
95 nacl::string* error_string) { | 95 nacl::string* error_string) { |
96 // TODO(sehr): this should use the new | 96 // TODO(sehr): this should use the new |
97 // SelLdrLauncher::OpenSrpcChannels interface, which should be free | 97 // SelLdrLauncher::OpenSrpcChannels interface, which should be free |
98 // of resource leaks. | 98 // of resource leaks. |
99 // bootstrap_socket was opened to communicate with the sel_ldr instance. | 99 // bootstrap_socket was opened to communicate with the sel_ldr instance. |
100 // Get the first IMC message and receive a socket address FD from it. | 100 // Get the first IMC message and receive a socket address FD from it. |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 } | 149 } |
150 PLUGIN_PRINTF(("ServiceRuntime: got 0x%"NACL_PRIxPTR"\n", | 150 PLUGIN_PRINTF(("ServiceRuntime: got 0x%"NACL_PRIxPTR"\n", |
151 (uintptr_t) out_conn_cap)); | 151 (uintptr_t) out_conn_cap)); |
152 nacl::DescWrapper* conn_cap = plugin_->wrapper_factory()->MakeGenericCleanup( | 152 nacl::DescWrapper* conn_cap = plugin_->wrapper_factory()->MakeGenericCleanup( |
153 out_conn_cap); | 153 out_conn_cap); |
154 if (conn_cap == NULL) { | 154 if (conn_cap == NULL) { |
155 *error_string = "ServiceRuntime: wrapper allocation failure"; | 155 *error_string = "ServiceRuntime: wrapper allocation failure"; |
156 return false; | 156 return false; |
157 } | 157 } |
158 out_conn_cap = NULL; // ownership passed | 158 out_conn_cap = NULL; // ownership passed |
159 reverse_service_ = new nacl::ReverseService(conn_cap, log_interface_->Ref()); | 159 reverse_service_ = new nacl::ReverseService(conn_cap, rev_interface_->Ref()); |
160 if (!reverse_service_->Start()) { | 160 if (!reverse_service_->Start()) { |
161 *error_string = "ServiceRuntime: starting reverse services failed"; | 161 *error_string = "ServiceRuntime: starting reverse services failed"; |
162 return false; | 162 return false; |
163 } | 163 } |
164 | 164 |
165 if (nacl_desc != NULL) { | 165 if (nacl_desc != NULL) { |
166 // This is executed only if we already launched sel_ldr process and | 166 // This is executed only if we already launched sel_ldr process and |
167 // now have an open communication channel to it, so we can send | 167 // now have an open communication channel to it, so we can send |
168 // the descriptor for nexe over. | 168 // the descriptor for nexe over. |
169 if (!runtime_channel_->LoadModule(nacl_desc->desc())) { | 169 if (!runtime_channel_->LoadModule(nacl_desc->desc())) { |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 PLUGIN_PRINTF(("ServiceRuntime::~ServiceRuntime (this=%p)\n", | 334 PLUGIN_PRINTF(("ServiceRuntime::~ServiceRuntime (this=%p)\n", |
335 static_cast<void*>(this))); | 335 static_cast<void*>(this))); |
336 | 336 |
337 // We do this just in case Terminate() was not called. | 337 // We do this just in case Terminate() was not called. |
338 delete subprocess_; | 338 delete subprocess_; |
339 delete runtime_channel_; | 339 delete runtime_channel_; |
340 if (reverse_service_ != NULL) { | 340 if (reverse_service_ != NULL) { |
341 reverse_service_->Unref(); | 341 reverse_service_->Unref(); |
342 } | 342 } |
343 | 343 |
344 log_interface_->Unref(); | 344 rev_interface_->Unref(); |
345 | 345 |
346 // TODO(sehr,mseaborn): use scoped_ptr for management of DescWrappers. | 346 // TODO(sehr,mseaborn): use scoped_ptr for management of DescWrappers. |
347 delete async_receive_desc_; | 347 delete async_receive_desc_; |
348 delete async_send_desc_; | 348 delete async_send_desc_; |
349 | 349 |
350 anchor_->Abandon(); | 350 anchor_->Abandon(); |
351 anchor_->Unref(); | 351 anchor_->Unref(); |
352 } | 352 } |
353 | 353 |
354 ScriptableHandle* ServiceRuntime::default_socket_address() const { | 354 ScriptableHandle* ServiceRuntime::default_socket_address() const { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 SocketAddress::New(plugin, descs[0])); | 400 SocketAddress::New(plugin, descs[0])); |
401 cleanup: | 401 cleanup: |
402 // TODO(sehr,mseaborn): use scoped_ptr for management of DescWrappers. | 402 // TODO(sehr,mseaborn): use scoped_ptr for management of DescWrappers. |
403 delete imc_desc; | 403 delete imc_desc; |
404 PLUGIN_PRINTF(("ServiceRuntime::GetSocketAddress (return %p)\n", | 404 PLUGIN_PRINTF(("ServiceRuntime::GetSocketAddress (return %p)\n", |
405 static_cast<void*>(retval))); | 405 static_cast<void*>(retval))); |
406 return retval; | 406 return retval; |
407 } | 407 } |
408 | 408 |
409 } // namespace plugin | 409 } // namespace plugin |
OLD | NEW |