Chromium Code Reviews| Index: net/test/test_server_win.cc |
| diff --git a/net/test/test_server_win.cc b/net/test/test_server_win.cc |
| index 64437cd46d6a2aa8348d67c8b63f0400a8b71d7c..ce104930d0610756167ff87fd00729675ce0faab 100644 |
| --- a/net/test/test_server_win.cc |
| +++ b/net/test/test_server_win.cc |
| @@ -145,7 +145,30 @@ bool TestServer::LaunchPython(const FilePath& testserver_path) { |
| return true; |
| } |
| +namespace { |
| + |
| +bool ReadData(bool *unblocked, HANDLE fd, DWORD bytes_max, uint8* buffer) { |
|
cbentzel
2010/11/17 22:32:50
Nit: bool* unblocked rather than bool *unblocked
akalin
2010/11/17 23:21:35
Done.
|
| + DWORD bytes_read = 0; |
| + while (bytes_read < bytes_max) { |
| + DWORD num_bytes; |
| + if (!ReadFile(fd, buffer + bytes_read, bytes_max - bytes_read, |
| + &num_bytes, NULL)) |
| + return false; |
| + if (num_bytes <= 0) |
| + return false; |
| + if (*unblocked) |
| + return false; |
| + bytes_read += num_bytes; |
| + } |
| + return true; |
| +} |
| + |
| +} // namespace |
| + |
| bool TestServer::WaitToStart() { |
| + ScopedHandle read_fd(child_read_fd_.Take()); |
| + ScopedHandle write_fd(child_write_fd_.Take()); |
| + |
| base::Thread thread("test_server_watcher"); |
| if (!thread.Start()) |
| return false; |
| @@ -153,36 +176,21 @@ bool TestServer::WaitToStart() { |
| // Prepare a timeout in case the server fails to start. |
| bool unblocked = false; |
| thread.message_loop()->PostDelayedTask(FROM_HERE, |
| - NewRunnableFunction(UnblockPipe, child_write_fd_.Get(), &unblocked), |
| + NewRunnableFunction(UnblockPipe, write_fd.Get(), &unblocked), |
| TestTimeouts::action_max_timeout_ms()); |
| - // Try to read two bytes from the pipe indicating the ephemeral port number. |
| - uint16 port; |
| - uint8* buffer = reinterpret_cast<uint8*>(&port); |
| - DWORD bytes_read = 0; |
| - DWORD bytes_max = sizeof(port); |
| - while (bytes_read < bytes_max) { |
| - DWORD num_bytes; |
| - if (!ReadFile(child_read_fd_, buffer + bytes_read, bytes_max - bytes_read, |
| - &num_bytes, NULL)) |
| - break; |
| - if (num_bytes <= 0) |
| - break; |
| - bytes_read += num_bytes; |
| - } |
| - thread.Stop(); |
| - child_read_fd_.Close(); |
| - child_write_fd_.Close(); |
| - |
| - // If we hit the timeout, fail. |
| - if (unblocked) |
| + uint32 server_data_len = 0; |
| + if (!ReadData(&unblocked, read_fd.Get(), sizeof server_data_len, |
| + reinterpret_cast<uint8*>(&server_data_len))) |
| + return false; |
| + std::string server_data(server_data_len, '\0'); |
| + if (!ReadData(&unblocked, read_fd.Get(), server_data_len, |
| + reinterpret_cast<uint8*>(&server_data[0]))) |
| return false; |
| - // If not enough bytes were read, fail. |
| - if (bytes_read < bytes_max) |
| + if (!ParseServerData(server_data)) |
| return false; |
| - host_port_pair_.set_port(port); |
| return true; |
| } |