| Index: util/win/registration_protocol_win.cc
 | 
| diff --git a/util/win/registration_protocol_win.cc b/util/win/registration_protocol_win.cc
 | 
| index 3e0fdf213985a4bc81ae295bd3377140463045da..38b1b45195a6b86f2353da09e1da04e8f5f9252d 100644
 | 
| --- a/util/win/registration_protocol_win.cc
 | 
| +++ b/util/win/registration_protocol_win.cc
 | 
| @@ -24,8 +24,8 @@ namespace crashpad {
 | 
|  bool SendToCrashHandlerServer(const base::string16& pipe_name,
 | 
|                                const crashpad::ClientToServerMessage& message,
 | 
|                                crashpad::ServerToClientMessage* response) {
 | 
| -  int tries = 5;
 | 
| -  while (tries > 0) {
 | 
| +  int tries = 0;
 | 
| +  for (;;) {
 | 
|      ScopedFileHANDLE pipe(
 | 
|          CreateFile(pipe_name.c_str(),
 | 
|                     GENERIC_READ | GENERIC_WRITE,
 | 
| @@ -35,10 +35,20 @@ bool SendToCrashHandlerServer(const base::string16& pipe_name,
 | 
|                     SECURITY_SQOS_PRESENT | SECURITY_IDENTIFICATION,
 | 
|                     nullptr));
 | 
|      if (!pipe.is_valid()) {
 | 
| -      Sleep(10);
 | 
| -      --tries;
 | 
| +      if (++tries == 5 || GetLastError() != ERROR_PIPE_BUSY) {
 | 
| +        PLOG(ERROR) << "CreateFile";
 | 
| +        return false;
 | 
| +      }
 | 
| +
 | 
| +      if (!WaitNamedPipe(pipe_name.c_str(), 1000) &&
 | 
| +          GetLastError() != ERROR_SEM_TIMEOUT) {
 | 
| +        PLOG(ERROR) << "WaitNamedPipe";
 | 
| +        return false;
 | 
| +      }
 | 
| +
 | 
|        continue;
 | 
|      }
 | 
| +
 | 
|      DWORD mode = PIPE_READMODE_MESSAGE;
 | 
|      if (!SetNamedPipeHandleState(pipe.get(), &mode, nullptr, nullptr)) {
 | 
|        PLOG(ERROR) << "SetNamedPipeHandleState";
 | 
| @@ -55,7 +65,8 @@ bool SendToCrashHandlerServer(const base::string16& pipe_name,
 | 
|          &bytes_read,
 | 
|          nullptr);
 | 
|      if (!result) {
 | 
| -      PLOG(ERROR) << "TransactNamedPipe";
 | 
| +      LOG(ERROR) << "TransactNamedPipe: expected " << sizeof(*response)
 | 
| +                 << ", observed " << bytes_read;
 | 
|        return false;
 | 
|      }
 | 
|      if (bytes_read != sizeof(*response)) {
 | 
| @@ -64,9 +75,6 @@ bool SendToCrashHandlerServer(const base::string16& pipe_name,
 | 
|      }
 | 
|      return true;
 | 
|    }
 | 
| -
 | 
| -  LOG(ERROR) << "failed to connect after retrying";
 | 
| -  return false;
 | 
|  }
 | 
|  
 | 
|  }  // namespace crashpad
 | 
| 
 |