summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-12 21:15:33 +0000
committerstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-12 21:15:33 +0000
commit6719905012bf5bd3cbac84f4b833a2a301250cb0 (patch)
tree2721cc4a7f04d0d03418748df68d3efa9da75188
parentcec3988dd20daeffe2136459fdaf5f2e6b084755 (diff)
downloadchromium_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.cc9
-rw-r--r--chrome/browser/renderer_host/buffered_resource_handler.cc6
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) {