From 3b73c6d279d8a8d4614553aa1f7650b25220f5ac Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Fri, 8 May 2015 09:42:46 +0200 Subject: [PATCH] Bug 1162524: Fix error handling |UnixSocketWatcher::Connect|, r=kmachulis With this patch, it's not an error if the connection operations stalls on a non-blocking socket; so don't return an error code. The patch also makes |connect| restart if it was aborted by a signal. --- ipc/unixfd/UnixSocketWatcher.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ipc/unixfd/UnixSocketWatcher.cpp b/ipc/unixfd/UnixSocketWatcher.cpp index 8308f11f50b..ee01a77651d 100644 --- a/ipc/unixfd/UnixSocketWatcher.cpp +++ b/ipc/unixfd/UnixSocketWatcher.cpp @@ -29,14 +29,14 @@ UnixSocketWatcher::Connect(const struct sockaddr* aAddr, socklen_t aAddrLen) MOZ_ASSERT(IsOpen()); MOZ_ASSERT(aAddr || !aAddrLen); - if (connect(GetFd(), aAddr, aAddrLen) < 0) { + if (TEMP_FAILURE_RETRY(connect(GetFd(), aAddr, aAddrLen) < 0)) { if (errno == EINPROGRESS) { mConnectionStatus = SOCKET_IS_CONNECTING; // Set up a write watch to receive the connect signal AddWatchers(WRITE_WATCHER, false); - } else { - OnError("connect", errno); + return NS_OK; } + OnError("connect", errno); return NS_ERROR_FAILURE; }