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; |
} |