diff --git a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp index 048da5858d665..aa4ad6477e6e1 100644 --- a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp +++ b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp @@ -449,12 +449,6 @@ TEST_F(RtsanFileTest, FcntlSetFdDiesWhenRealtime) { close(fd); } -TEST(TestRtsanInterceptors, CloseDiesWhenRealtime) { - auto Func = []() { close(0); }; - ExpectRealtimeDeath(Func, "close"); - ExpectNonRealtimeSurvival(Func); -} - TEST(TestRtsanInterceptors, ChdirDiesWhenRealtime) { auto Func = []() { chdir("."); }; ExpectRealtimeDeath(Func, "chdir"); @@ -606,8 +600,10 @@ class RtsanOpenedFileTest : public RtsanFileTest { } void TearDown() override { - if (file != nullptr) + const bool is_open = fcntl(fd, F_GETFD) != -1; + if (is_open && file != nullptr) fclose(file); + RtsanFileTest::TearDown(); } @@ -620,6 +616,16 @@ class RtsanOpenedFileTest : public RtsanFileTest { int fd = -1; }; +TEST_F(RtsanOpenedFileTest, CloseDiesWhenRealtime) { + auto Func = [this]() { close(GetOpenFd()); }; + ExpectRealtimeDeath(Func, "close"); +} + +TEST_F(RtsanOpenedFileTest, CloseSurvivesWhenNotRealtime) { + auto Func = [this]() { close(GetOpenFd()); }; + ExpectNonRealtimeSurvival(Func); +} + #if SANITIZER_INTERCEPT_FSEEK TEST_F(RtsanOpenedFileTest, FgetposDieWhenRealtime) { auto Func = [this]() {