Revision: 9469
Author:   [email protected]
Date:     Wed Sep 28 06:27:20 2011
Log:      Fixed deadlock in the debugger agent in Windows.

BUG=v8:1723
TEST=cctest test-debug/DebuggerAgent

Review URL: http://codereview.chromium.org/8069002
http://code.google.com/p/v8/source/detail?r=9469

Modified:
 /branches/bleeding_edge/src/platform-win32.cc
 /branches/bleeding_edge/test/cctest/test-debug.cc

=======================================
--- /branches/bleeding_edge/src/platform-win32.cc       Mon Sep 19 11:36:47 2011
+++ /branches/bleeding_edge/src/platform-win32.cc       Wed Sep 28 06:27:20 2011
@@ -1511,6 +1511,7 @@
  public:
   explicit PlatformData(HANDLE thread) : thread_(thread) {}
   HANDLE thread_;
+  unsigned thread_id_;
 };


@@ -1554,13 +1555,15 @@
                      ThreadEntry,
                      this,
                      0,
-                     NULL));
+                     &data_->thread_id_));
 }


 // Wait for thread to terminate.
 void Thread::Join() {
-  WaitForSingleObject(data_->thread_, INFINITE);
+  if (data_->thread_id_ != GetCurrentThreadId()) {
+    WaitForSingleObject(data_->thread_, INFINITE);
+  }
 }


=======================================
--- /branches/bleeding_edge/test/cctest/test-debug.cc Mon Sep 19 11:36:47 2011 +++ /branches/bleeding_edge/test/cctest/test-debug.cc Wed Sep 28 06:27:20 2011
@@ -5845,11 +5845,14 @@
   const int kPort1 = 5858;
   const int kPort2 = 5857;
   const int kPort3 = 5856;
+  const int kPort4 = 5855;

   // Make a string with the port2 number.
   const int kPortBufferLen = 6;
   char port2_str[kPortBufferLen];
   OS::SNPrintF(i::Vector<char>(port2_str, kPortBufferLen), "%d", kPort2);
+  char port4_str[kPortBufferLen];
+  OS::SNPrintF(i::Vector<char>(port4_str, kPortBufferLen), "%d", kPort4);

   bool ok;

@@ -5885,6 +5888,27 @@
   debugger->StopAgent();

   delete server;
+
+  // Test responsiveness after connecting and disconnecting a client.
+  ok = debugger->StartAgent("test", kPort4);
+  CHECK(ok);
+  client = i::OS::CreateSocket();
+  ok = client->Connect("localhost", port4_str);
+  CHECK(ok);
+  ok = client->Receive(&buf, 1) == 1;
+  CHECK(ok);
+  ok = client->Send(
+      "{\"seq\":1,\"type\":\"request\",\"command\":\"disconnect\"}", 49);
+  CHECK(ok);
+  client->Shutdown();
+  delete client;
+  // Is the server still responsive?
+  client = i::OS::CreateSocket();
+  ok = client->Connect("localhost", port4_str);
+  CHECK(ok);
+  client->Shutdown();
+  delete client;
+  debugger->StopAgent();
 }


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to