Merge "leak_test: use tgkill to check if threads are alive." am: 80d85f72dd
am: 6f844f936f
Change-Id: I2bad3d4a8fb251da87ee1d7a54c914244369dded
This commit is contained in:
commit
1dbc20905a
1 changed files with 9 additions and 6 deletions
|
@ -17,6 +17,7 @@
|
|||
#include <err.h>
|
||||
#include <inttypes.h>
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/mman.h>
|
||||
|
@ -30,26 +31,28 @@
|
|||
#include <vector>
|
||||
|
||||
#include <android-base/macros.h>
|
||||
#include <android-base/threads.h>
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
static void WaitUntilAllExited(pid_t* pids, size_t pid_count) {
|
||||
static void WaitUntilAllThreadsExited(pid_t* tids, size_t tid_count) {
|
||||
// Wait until all children have exited.
|
||||
bool alive = true;
|
||||
while (alive) {
|
||||
alive = false;
|
||||
for (size_t i = 0; i < pid_count; ++i) {
|
||||
if (pids[i] != 0) {
|
||||
if (kill(pids[i], 0) == 0) {
|
||||
for (size_t i = 0; i < tid_count; ++i) {
|
||||
if (tids[i] != 0) {
|
||||
if (tgkill(getpid(), tids[i], 0) == 0) {
|
||||
alive = true;
|
||||
} else {
|
||||
EXPECT_EQ(errno, ESRCH);
|
||||
pids[i] = 0; // Skip in next loop.
|
||||
tids[i] = 0; // Skip in next loop.
|
||||
}
|
||||
}
|
||||
}
|
||||
sched_yield();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -155,7 +158,7 @@ TEST(pthread_leak, detach) {
|
|||
pthread_barrier_wait(&barrier);
|
||||
ASSERT_EQ(pthread_barrier_destroy(&barrier), 0);
|
||||
|
||||
WaitUntilAllExited(tids, arraysize(tids));
|
||||
WaitUntilAllThreadsExited(tids, threads_count);
|
||||
|
||||
// A native bridge implementation might need a warm up pass to reach a steady state.
|
||||
// http://b/37920774.
|
||||
|
|
Loading…
Reference in a new issue