diff options
author | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-12 21:15:33 +0000 |
---|---|---|
committer | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-12 21:15:33 +0000 |
commit | 6719905012bf5bd3cbac84f4b833a2a301250cb0 (patch) | |
tree | 2721cc4a7f04d0d03418748df68d3efa9da75188 | |
parent | cec3988dd20daeffe2136459fdaf5f2e6b084755 (diff) | |
download | chromium_src-6719905012bf5bd3cbac84f4b833a2a301250cb0.zip chromium_src-6719905012bf5bd3cbac84f4b833a2a301250cb0.tar.gz chromium_src-6719905012bf5bd3cbac84f4b833a2a301250cb0.tar.bz2 |
Handle file descriptor exhaustions a little more gracefully. This prevents the browser itself from crashing in Intl2 page cycler tests on the Mac (although the renderer still dies, at least in debug), so that seems like a good idea whatever larger solution we find for the file descriptor issue.
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/125024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18318 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/shared_memory_posix.cc | 9 | ||||
-rw-r--r-- | chrome/browser/renderer_host/buffered_resource_handler.cc | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/base/shared_memory_posix.cc b/base/shared_memory_posix.cc index fe4b225..55adcb4 100644 --- a/base/shared_memory_posix.cc +++ b/base/shared_memory_posix.cc @@ -225,7 +225,14 @@ bool SharedMemory::CreateOrOpen(const std::wstring &name, } mapped_file_ = dup(fileno(fp)); - DCHECK(mapped_file_ >= 0); + if (mapped_file_ == -1) { + if (errno == EMFILE) { + LOG(WARNING) << "Shared memory creation failed; out of file descriptors"; + return false; + } else { + NOTREACHED() << "Call to dup failed, errno=" << errno; + } + } struct stat st; if (fstat(mapped_file_, &st)) diff --git a/chrome/browser/renderer_host/buffered_resource_handler.cc b/chrome/browser/renderer_host/buffered_resource_handler.cc index 5ac037a..cc9d2cb 100644 --- a/chrome/browser/renderer_host/buffered_resource_handler.cc +++ b/chrome/browser/renderer_host/buffered_resource_handler.cc @@ -94,12 +94,14 @@ bool BufferedResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, if (finished_) return false; - bool ret = real_handler_->OnWillRead(request_id, buf, buf_size, min_size); + if (!real_handler_->OnWillRead(request_id, buf, buf_size, min_size)) { + return false; + } read_buffer_ = *buf; read_buffer_size_ = *buf_size; DCHECK(read_buffer_size_ >= kMaxBytesToSniff * 2); bytes_read_ = 0; - return ret; + return true; } bool BufferedResourceHandler::OnReadCompleted(int request_id, int* bytes_read) { |