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