Index: sandbox/linux/services/proc_util.cc |
diff --git a/sandbox/linux/services/proc_util.cc b/sandbox/linux/services/proc_util.cc |
index fd0e34826e787c58ea07ed2aa98044bd95002908..13d8842f788b453393f7ca802e2f3c0b6d2110a1 100644 |
--- a/sandbox/linux/services/proc_util.cc |
+++ b/sandbox/linux/services/proc_util.cc |
@@ -13,6 +13,7 @@ |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/posix/eintr_wrapper.h" |
#include "base/strings/string_number_conversions.h" |
namespace sandbox { |
@@ -31,7 +32,8 @@ typedef scoped_ptr<DIR, DIRCloser> ScopedDIR; |
int ProcUtil::CountOpenFds(int proc_fd) { |
DCHECK_LE(0, proc_fd); |
- int proc_self_fd = openat(proc_fd, "self/fd", O_DIRECTORY | O_RDONLY); |
+ int proc_self_fd = HANDLE_EINTR( |
+ openat(proc_fd, "self/fd", O_DIRECTORY | O_RDONLY | O_CLOEXEC)); |
PCHECK(0 <= proc_self_fd); |
// Ownership of proc_self_fd is transferred here, it must not be closed |
@@ -109,4 +111,13 @@ bool ProcUtil::HasOpenDirectory(int proc_fd) { |
return false; |
} |
+//static |
+base::ScopedFD ProcUtil::OpenProcSelfTask() { |
+ base::ScopedFD proc_self_task( |
+ HANDLE_EINTR( |
+ open("/proc/self/task/", O_RDONLY | O_DIRECTORY | O_CLOEXEC))); |
+ PCHECK(proc_self_task.is_valid()); |
+ return proc_self_task.Pass(); |
+} |
+ |
} // namespace sandbox |