Index: ppapi/native_client/src/trusted/plugin/pnacl_streaming_translate_thread.cc |
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_streaming_translate_thread.cc b/ppapi/native_client/src/trusted/plugin/pnacl_streaming_translate_thread.cc |
index 3f4a968ad96c3fbc2a9175dfb60b7785b170a5af..64d6bd45620138a8a0ea06c7a7134bd0cc0a11f9 100644 |
--- a/ppapi/native_client/src/trusted/plugin/pnacl_streaming_translate_thread.cc |
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_streaming_translate_thread.cc |
@@ -17,7 +17,12 @@ PnaclStreamingTranslateThread::PnaclStreamingTranslateThread() : done_(false) { |
NaClXCondVarCtor(&buffer_cond_); |
} |
-PnaclStreamingTranslateThread::~PnaclStreamingTranslateThread() {} |
+PnaclStreamingTranslateThread::~PnaclStreamingTranslateThread() { |
+ PLUGIN_PRINTF(("~PnaclTranslateThread (translate_thread=%p)\n", this)); |
+ SetSubprocessesShouldDie(); |
+ NaClThreadJoin(translate_thread_.get()); |
+ PLUGIN_PRINTF(("~PnaclTranslateThread joined\n")); |
+} |
void PnaclStreamingTranslateThread::RunTranslate( |
const pp::CompletionCallback& finish_callback, |
@@ -103,6 +108,7 @@ void PnaclStreamingTranslateThread::DoTranslate() { |
PluginReverseInterface* llc_reverse = |
llc_subprocess->service_runtime()->rev_interface(); |
llc_reverse->AddTempQuotaManagedFile(obj_file_->identifier()); |
+ RegisterReverseInterface(llc_reverse); |
if (!llc_subprocess->InvokeSrpcMethod("StreamInit", |
"h", |
@@ -142,6 +148,10 @@ void PnaclStreamingTranslateThread::DoTranslate() { |
} else { |
NaClXMutexUnlock(&cond_mu_); |
} |
+ if (SubprocessesShouldDie()) { |
+ TranslateFailed("Stopped by coordinator."); |
+ return; |
+ } |
} |
PLUGIN_PRINTF(("PnaclTranslateThread done with chunks\n")); |
// Finish llc. |
@@ -162,6 +172,7 @@ void PnaclStreamingTranslateThread::DoTranslate() { |
lib_dependencies.c_str())); |
// Shut down the llc subprocess. |
+ RegisterReverseInterface(NULL); |
llc_subprocess.reset(NULL); |
if (SubprocessesShouldDie()) { |
TranslateFailed("stopped by coordinator."); |