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
This commit is contained in:
christian.plesner.hansen@gmail.com 2009-09-25 10:36:00 +00:00
parent 4c256c0691
commit 319097f255
6 changed files with 19 additions and 1 deletions

View File

@ -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_);

View File

@ -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_;

View File

@ -2498,6 +2498,11 @@ void Debugger::StopAgent() {
}
void Debugger::WaitForAgent() {
if (agent_ != NULL)
agent_->WaitUntilListening();
}
MessageImpl MessageImpl::NewEvent(DebugEvent event,
bool running,
Handle<JSObject> exec_state,

View File

@ -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();

View File

@ -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);

View File

@ -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);