summaryrefslogtreecommitdiffstats
path: root/net/udp
diff options
context:
space:
mode:
authorsergeyu <sergeyu@chromium.org>2015-03-19 18:11:55 -0700
committerCommit bot <commit-bot@chromium.org>2015-03-20 01:12:31 +0000
commit494d408657f49528aa43827bc3602df1331ebfe3 (patch)
treeb23a167e2bb162b4d2ad270feae4890c9e1f5656 /net/udp
parent316283d479f75eb6c6b4ea49394b399ec91d0a7f (diff)
downloadchromium_src-494d408657f49528aa43827bc3602df1331ebfe3.zip
chromium_src-494d408657f49528aa43827bc3602df1331ebfe3.tar.gz
chromium_src-494d408657f49528aa43827bc3602df1331ebfe3.tar.bz2
PCHECK when closing UDP sockets only when errno=EBADF.
This is an attempto to resolve bug 461246. Issues there is that close() fails sometimes on OSX for unknown reason. My guess is that it close() fails with EIO error for some reason, but EIO may be ignored in this case as the sockets gets closed anyway. BUG=461246 Review URL: https://codereview.chromium.org/1025533002 Cr-Commit-Position: refs/heads/master@{#321483}
Diffstat (limited to 'net/udp')
-rw-r--r--net/udp/udp_socket_libevent.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/udp/udp_socket_libevent.cc b/net/udp/udp_socket_libevent.cc
index 6fdb94e..04fd8a9 100644
--- a/net/udp/udp_socket_libevent.cc
+++ b/net/udp/udp_socket_libevent.cc
@@ -13,6 +13,7 @@
#include <sys/socket.h>
#include "base/callback.h"
+#include "base/debug/alias.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/sparse_histogram.h"
@@ -126,7 +127,12 @@ void UDPSocketLibevent::Close() {
ok = write_socket_watcher_.StopWatchingFileDescriptor();
DCHECK(ok);
- PCHECK(0 == IGNORE_EINTR(close(socket_)));
+ if (IGNORE_EINTR(close(socket_)) == -1) {
+ int last_error = errno;
+ base::debug::Alias(&last_error);
+ // Crash on any error other than EIO.
+ PCHECK(last_error == EIO);
+ }
socket_ = kInvalidSocket;
addr_family_ = 0;