diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-14 19:36:50 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-14 19:36:50 +0000 |
commit | c0e895e2961bd05570b0d7660016914601bf8c7d (patch) | |
tree | 3104b59d5f4d22ad60a35a3bcefdb7caff27d3c0 /tools/android | |
parent | 5fcc99e7cf20aa9d0c44e2fdaef207d9e45f907a (diff) | |
download | chromium_src-c0e895e2961bd05570b0d7660016914601bf8c7d.zip chromium_src-c0e895e2961bd05570b0d7660016914601bf8c7d.tar.gz chromium_src-c0e895e2961bd05570b0d7660016914601bf8c7d.tar.bz2 |
Implement ScopedFD in terms of ScopedGeneric.
Move to a new file base/files/scoped_file.h. I will also add ScopedFILE to here (currently in file_util.h) later.
I think there is a crash in the old code in content/browser/zygote_host/zygote_host_impl_linux.cc that this patch should fix. The old ScopedFD took the address of something in a vector that is being modified.
I removed SafeScopedFD from content/common/sandbox_linux/sandbox_linux.cc since base's ScopedFD not CHECKs on close failure (this is a more recent addition).
BUG=
R=agl@chromium.org, viettrungluu@chromium.org
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=257001
Review URL: https://codereview.chromium.org/191673003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257179 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/android')
-rw-r--r-- | tools/android/memdump/memdump.cc | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/tools/android/memdump/memdump.cc b/tools/android/memdump/memdump.cc index 20684f6..4f4dd14 100644 --- a/tools/android/memdump/memdump.cc +++ b/tools/android/memdump/memdump.cc @@ -22,6 +22,7 @@ #include "base/callback_helpers.h" #include "base/containers/hash_tables.h" #include "base/file_util.h" +#include "base/files/scoped_file.h" #include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" @@ -436,13 +437,12 @@ bool CollectProcessMemoryInformation(int page_count_fd, int page_flags_fd, ProcessMemory* process_memory) { const pid_t pid = process_memory->pid; - int pagemap_fd = open( - base::StringPrintf("/proc/%d/pagemap", pid).c_str(), O_RDONLY); - if (pagemap_fd < 0) { + base::ScopedFD pagemap_fd(open( + base::StringPrintf("/proc/%d/pagemap", pid).c_str(), O_RDONLY)); + if (!pagemap_fd.is_valid()) { PLOG(ERROR) << "open"; return false; } - file_util::ScopedFD auto_closer(&pagemap_fd); std::vector<MemoryMap>* const process_maps = &process_memory->memory_maps; if (!GetProcessMaps(pid, process_maps)) return false; @@ -450,7 +450,7 @@ bool CollectProcessMemoryInformation(int page_count_fd, it != process_maps->end(); ++it) { std::vector<PageInfo>* const committed_pages = &it->committed_pages; BitSet* const pages_bits = &it->committed_pages_bits; - GetPagesForMemoryMap(pagemap_fd, *it, committed_pages, pages_bits); + GetPagesForMemoryMap(pagemap_fd.get(), *it, committed_pages, pages_bits); SetPagesInfo(page_count_fd, page_flags_fd, committed_pages); } return true; @@ -489,21 +489,18 @@ int main(int argc, char** argv) { std::vector<ProcessMemory> processes_memory(pids.size()); { - int page_count_fd = open("/proc/kpagecount", O_RDONLY); - if (page_count_fd < 0) { + base::ScopedFD page_count_fd(open("/proc/kpagecount", O_RDONLY)); + if (!page_count_fd.is_valid()) { PLOG(ERROR) << "open /proc/kpagecount"; return EXIT_FAILURE; } - int page_flags_fd = open("/proc/kpageflags", O_RDONLY); - if (page_flags_fd < 0) { + base::ScopedFD page_flags_fd(open("/proc/kpageflags", O_RDONLY)); + if (!page_flags_fd.is_valid()) { PLOG(ERROR) << "open /proc/kpageflags"; return EXIT_FAILURE; } - file_util::ScopedFD page_count_fd_closer(&page_count_fd); - file_util::ScopedFD page_flags_fd_closer(&page_flags_fd); - base::ScopedClosureRunner auto_resume_processes( base::Bind(&KillAll, pids, SIGCONT)); KillAll(pids, SIGSTOP); @@ -513,7 +510,7 @@ int main(int argc, char** argv) { &processes_memory[it - pids.begin()]; process_memory->pid = *it; if (!CollectProcessMemoryInformation( - page_count_fd, page_flags_fd, process_memory)) { + page_count_fd.get(), page_flags_fd.get(), process_memory)) { return EXIT_FAILURE; } } |