Commit fd575f71 authored by yangguo@chromium.org's avatar yangguo@chromium.org

Fixed deadlock in the debugger agent in Windows.

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

Review URL: http://codereview.chromium.org/8069002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9469 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 0b26be29
...@@ -1511,6 +1511,7 @@ class Thread::PlatformData : public Malloced { ...@@ -1511,6 +1511,7 @@ class Thread::PlatformData : public Malloced {
public: public:
explicit PlatformData(HANDLE thread) : thread_(thread) {} explicit PlatformData(HANDLE thread) : thread_(thread) {}
HANDLE thread_; HANDLE thread_;
unsigned thread_id_;
}; };
...@@ -1554,13 +1555,15 @@ void Thread::Start() { ...@@ -1554,13 +1555,15 @@ void Thread::Start() {
ThreadEntry, ThreadEntry,
this, this,
0, 0,
NULL)); &data_->thread_id_));
} }
// Wait for thread to terminate. // Wait for thread to terminate.
void Thread::Join() { void Thread::Join() {
WaitForSingleObject(data_->thread_, INFINITE); if (data_->thread_id_ != GetCurrentThreadId()) {
WaitForSingleObject(data_->thread_, INFINITE);
}
} }
......
...@@ -5845,11 +5845,14 @@ TEST(DebuggerAgent) { ...@@ -5845,11 +5845,14 @@ TEST(DebuggerAgent) {
const int kPort1 = 5858; const int kPort1 = 5858;
const int kPort2 = 5857; const int kPort2 = 5857;
const int kPort3 = 5856; const int kPort3 = 5856;
const int kPort4 = 5855;
// Make a string with the port2 number. // Make a string with the port2 number.
const int kPortBufferLen = 6; const int kPortBufferLen = 6;
char port2_str[kPortBufferLen]; char port2_str[kPortBufferLen];
OS::SNPrintF(i::Vector<char>(port2_str, kPortBufferLen), "%d", kPort2); 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; bool ok;
...@@ -5885,6 +5888,27 @@ TEST(DebuggerAgent) { ...@@ -5885,6 +5888,27 @@ TEST(DebuggerAgent) {
debugger->StopAgent(); debugger->StopAgent();
delete server; 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();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment