From 319097f2554b2bf0dfdab9cb5ad9b41cb6609f26 Mon Sep 17 00:00:00 2001 From: "christian.plesner.hansen@gmail.com" Date: Fri, 25 Sep 2009 10:36:00 +0000 Subject: [PATCH] Fixed some cctest flakiness on mac. Review URL: http://codereview.chromium.org/242003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2968 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/debug-agent.cc | 5 +++++ src/debug-agent.h | 5 ++++- src/debug.cc | 5 +++++ src/debug.h | 3 +++ test/cctest/test-debug.cc | 1 + test/cctest/test-sockets.cc | 1 + 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/debug-agent.cc b/src/debug-agent.cc index 3dba53a..9d5cace 100644 --- a/src/debug-agent.cc +++ b/src/debug-agent.cc @@ -65,6 +65,7 @@ void DebuggerAgent::Run() { // Accept connections on the bound port. while (!terminate_) { bool ok = server_->Listen(1); + listening_->Signal(); if (ok) { // Accept the new connection. Socket* client = server_->Accept(); @@ -93,6 +94,10 @@ void DebuggerAgent::Shutdown() { } +void DebuggerAgent::WaitUntilListening() { + listening_->Wait(); +} + void DebuggerAgent::CreateSession(Socket* client) { ScopedLock with(session_access_); diff --git a/src/debug-agent.h b/src/debug-agent.h index 04f883f..3647994 100644 --- a/src/debug-agent.h +++ b/src/debug-agent.h @@ -47,7 +47,8 @@ class DebuggerAgent: public Thread { : name_(StrDup(name)), port_(port), server_(OS::CreateSocket()), terminate_(false), session_access_(OS::CreateMutex()), session_(NULL), - terminate_now_(OS::CreateSemaphore(0)) { + terminate_now_(OS::CreateSemaphore(0)), + listening_(OS::CreateSemaphore(0)) { ASSERT(instance_ == NULL); instance_ = this; } @@ -57,6 +58,7 @@ class DebuggerAgent: public Thread { } void Shutdown(); + void WaitUntilListening(); private: void Run(); @@ -72,6 +74,7 @@ class DebuggerAgent: public Thread { Mutex* session_access_; // Mutex guarging access to session_. DebuggerAgentSession* session_; // Current active session if any. Semaphore* terminate_now_; // Semaphore to signal termination. + Semaphore* listening_; static DebuggerAgent* instance_; diff --git a/src/debug.cc b/src/debug.cc index 3c2bfa8..ec658d6 100644 --- a/src/debug.cc +++ b/src/debug.cc @@ -2498,6 +2498,11 @@ void Debugger::StopAgent() { } +void Debugger::WaitForAgent() { + if (agent_ != NULL) + agent_->WaitUntilListening(); +} + MessageImpl MessageImpl::NewEvent(DebugEvent event, bool running, Handle exec_state, diff --git a/src/debug.h b/src/debug.h index d6b2c08..d5efc43 100644 --- a/src/debug.h +++ b/src/debug.h @@ -645,6 +645,9 @@ class Debugger { // Stop the debugger agent. static void StopAgent(); + // Blocks until the agent has started listening for connections + static void WaitForAgent(); + // Unload the debugger if possible. Only called when no debugger is currently // active. static void UnloadDebugger(); diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc index 436084a..e724375 100644 --- a/test/cctest/test-debug.cc +++ b/test/cctest/test-debug.cc @@ -4522,6 +4522,7 @@ TEST(DebuggerAgent) { // with the client connected. ok = i::Debugger::StartAgent("test", kPort2); CHECK(ok); + i::Debugger::WaitForAgent(); i::Socket* client = i::OS::CreateSocket(); ok = client->Connect("localhost", port2_str); CHECK(ok); diff --git a/test/cctest/test-sockets.cc b/test/cctest/test-sockets.cc index a4b2285..822a23f 100644 --- a/test/cctest/test-sockets.cc +++ b/test/cctest/test-sockets.cc @@ -42,6 +42,7 @@ void SocketListenerThread::Run() { // Create the server socket and bind it to the requested port. server_ = OS::CreateSocket(); + server_->SetReuseAddress(true); CHECK(server_ != NULL); ok = server_->Bind(port_); CHECK(ok); -- 2.7.4