blob: f0ee20091d79817af86bce3adabb95334f3c4694 [file] [log] [blame]
diff --git src/gtest-port.cc b/src/gtest-port.cc
index b860d48..acb459b 100644
--- a/src/gtest-port.cc
+++ b/src/gtest-port.cc
@@ -35,6 +35,8 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#include <sys/types.h>
+#include <dirent.h>
#if GTEST_OS_WINDOWS_MOBILE
# include <windows.h> // For TerminateProcess()
@@ -98,6 +98,21 @@ size_t GetThreadCount() {
}
}
+#elif GTEST_OS_LINUX
+
+size_t GetThreadCount() {
+ size_t thread_count = 0;
+ if (DIR *dir = opendir("/proc/self/task")) {
+ while (dirent *entry = readdir(dir)) {
+ if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
+ ++thread_count;
+ }
+ }
+ closedir(dir);
+ }
+ return thread_count;
+}
+
#else
size_t GetThreadCount() {
diff --git a/src/gtest-death-test.cc b/src/gtest-death-test.cc
index 8b2e413..faad3a4 100644
--- a/src/gtest-death-test.cc
+++ b/src/gtest-death-test.cc
@@ -44,6 +44,8 @@
# include <fcntl.h>
# include <limits.h>
# include <stdarg.h>
+# include <sys/time.h>
+# include <sys/resource.h>
# if GTEST_OS_WINDOWS
# include <windows.h>
@@ -898,6 +900,11 @@ inline char** GetEnviron() { return environ; }
// This function is called in a clone()-ed process and thus must avoid
// any potentially unsafe operations like malloc or libc functions.
static int ExecDeathTestChildMain(void* child_arg) {
+ rlimit core_rlimit;
+ core_rlimit.rlim_cur = 0;
+ core_rlimit.rlim_max = 0;
+ GTEST_DEATH_TEST_CHECK_SYSCALL_(setrlimit(RLIMIT_CORE, &core_rlimit));
+
ExecDeathTestArgs* const args = static_cast<ExecDeathTestArgs*>(child_arg);
GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd));