From 52e44c833fe5153415a86e469bcfb09188af2846 Mon Sep 17 00:00:00 2001 From: Chris Apple Date: Thu, 12 Jun 2025 22:51:14 -0600 Subject: [PATCH] [rtsan] Fix issue where close test would lead to crash --- .../tests/rtsan_test_interceptors_posix.cpp | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) 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]() {