Bug #21512 ยป 0001-client-make-the-ShutdownRacer-test-even-more-thrashy.patch
src/test/libcephfs/test.cc | ||
---|---|---|
ceph_shutdown(cmount);
|
||
}
|
||
#define NTHREADS 128
|
||
static void shutdown_racer_func()
|
||
{
|
||
const int niter = 64;
|
||
struct ceph_mount_info *cmount;
|
||
ASSERT_EQ(ceph_create(&cmount, NULL), 0);
|
||
ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
|
||
ASSERT_EQ(0, ceph_conf_parse_env(cmount, NULL));
|
||
ASSERT_EQ(ceph_mount(cmount, "/"), 0);
|
||
ceph_shutdown(cmount);
|
||
int i;
|
||
for (i = 0; i < niter; ++i) {
|
||
ASSERT_EQ(ceph_create(&cmount, NULL), 0);
|
||
ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
|
||
ASSERT_EQ(0, ceph_conf_parse_env(cmount, NULL));
|
||
ASSERT_EQ(ceph_mount(cmount, "/"), 0);
|
||
ceph_shutdown(cmount);
|
||
}
|
||
}
|
||
// See tracker #20988
|
||
TEST(LibCephFS, ShutdownRace)
|
||
{
|
||
std::thread threads[NTHREADS];
|
||
const int nthreads = 128;
|
||
std::thread threads[nthreads];
|
||
// Need a bunch of fd's for this test
|
||
struct rlimit rold, rnew;
|
||
... | ... | |
rnew.rlim_cur = rnew.rlim_max;
|
||
ASSERT_EQ(setrlimit(RLIMIT_NOFILE, &rnew), 0);
|
||
for (int i = 0; i < NTHREADS; ++i)
|
||
for (int i = 0; i < nthreads; ++i)
|
||
threads[i] = std::thread(shutdown_racer_func);
|
||
for (int i = 0; i < NTHREADS; ++i)
|
||
for (int i = 0; i < nthreads; ++i)
|
||
threads[i].join();
|
||
ASSERT_EQ(setrlimit(RLIMIT_NOFILE, &rold), 0);
|
||
}
|