diff options
author | sergeyu <sergeyu@chromium.org> | 2015-03-19 18:11:55 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-20 01:12:31 +0000 |
commit | 494d408657f49528aa43827bc3602df1331ebfe3 (patch) | |
tree | b23a167e2bb162b4d2ad270feae4890c9e1f5656 /net/udp | |
parent | 316283d479f75eb6c6b4ea49394b399ec91d0a7f (diff) | |
download | chromium_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.cc | 8 |
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; |