Fix a possible dead lock when quiting.
authorCheng Zhao <zcbenz@gmail.com>
Mon, 11 Nov 2013 08:57:40 +0000 (16:57 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 11 Nov 2013 08:59:57 +0000 (16:59 +0800)
It could happen that we are quitting when the embed thread is still
waiting for the main thread, so we make sure embed thread is always
signaled when quitting.

common/node_bindings.cc

index 963f8fe..3e80041 100644 (file)
@@ -39,10 +39,16 @@ NodeBindings::NodeBindings(bool is_browser)
 }
 
 NodeBindings::~NodeBindings() {
-  // Clear uv.
+  // Quit the embed thread.
   embed_closed_ = true;
+  uv_sem_post(&embed_sem_);
   WakeupEmbedThread();
+
+  // Wait for everything to be done.
   uv_thread_join(&embed_thread_);
+  message_loop_->RunUntilIdle();
+
+  // Clear uv.
   uv_sem_destroy(&embed_sem_);
   uv_timer_stop(&idle_timer_);
 }