aboutsummaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorShengYi Hung <aokblast@FreeBSD.org>2026-03-17 14:53:08 +0000
committerShengYi Hung <aokblast@FreeBSD.org>2026-03-22 02:48:24 +0000
commitc25976f0a9a3a102ce47b45c19b2c93e8069433b (patch)
tree49dc51f839a194d8ea0e03dbfce0bd48733ce6b0 /lib/libc
parent191f47bcd65097599a962b46ae293e5ebe4e5b67 (diff)
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/tests/stdlib/cxa_thread_atexit_nothr_test.cc11
-rw-r--r--lib/libc/tests/stdlib/cxa_thread_atexit_test.cc10
2 files changed, 16 insertions, 5 deletions
diff --git a/lib/libc/tests/stdlib/cxa_thread_atexit_nothr_test.cc b/lib/libc/tests/stdlib/cxa_thread_atexit_nothr_test.cc
index 0b3b9497a6bd..d70c6b1b88dc 100644
--- a/lib/libc/tests/stdlib/cxa_thread_atexit_nothr_test.cc
+++ b/lib/libc/tests/stdlib/cxa_thread_atexit_nothr_test.cc
@@ -30,7 +30,10 @@
#include <cstdio>
#include <cstdlib>
+#define AGAIN_CALL_LIMIT 20
+
static FILE *output = NULL;
+static int again_counter = 0;
struct Foo {
Foo() { ATF_REQUIRE(fprintf(output, "Created\n") > 0); }
@@ -79,14 +82,16 @@ extern "C" int __cxa_thread_atexit(void (*)(void *), void *, void *);
static void
again(void *arg)
{
-
- __cxa_thread_atexit(again, arg, &output);
+ if (again_counter < AGAIN_CALL_LIMIT) {
+ again_counter++;
+ __cxa_thread_atexit(again, arg, &output);
+ }
}
ATF_TEST_CASE_WITHOUT_HEAD(cxx__thread_inf_dtors);
ATF_TEST_CASE_BODY(cxx__thread_inf_dtors)
{
-
+ skip("Skip since we only have main thread");
again(NULL);
}
diff --git a/lib/libc/tests/stdlib/cxa_thread_atexit_test.cc b/lib/libc/tests/stdlib/cxa_thread_atexit_test.cc
index 628a70b510d1..6a5587698d37 100644
--- a/lib/libc/tests/stdlib/cxa_thread_atexit_test.cc
+++ b/lib/libc/tests/stdlib/cxa_thread_atexit_test.cc
@@ -30,7 +30,10 @@
#include <cstdlib>
#include <thread>
+#define AGAIN_CALL_LIMIT 20
+
static FILE *output = NULL;
+static int again_counter = 0;
struct Foo {
Foo() { ATF_REQUIRE(fprintf(output, "Created\n") > 0); }
@@ -52,8 +55,10 @@ extern "C" int __cxa_thread_atexit(void (*)(void *), void *, void *);
static void
again(void *arg)
{
-
- __cxa_thread_atexit(again, arg, &output);
+ if (again_counter < AGAIN_CALL_LIMIT) {
+ ++again_counter;
+ __cxa_thread_atexit(again, arg, &output);
+ }
}
struct Baz {
@@ -164,6 +169,7 @@ ATF_TEST_CASE_BODY(cxx__thread_inf_dtors)
std::thread t([]() { e.use(); });
t.join();
+ ATF_REQUIRE_EQ(again_counter, AGAIN_CALL_LIMIT);
}
ATF_INIT_TEST_CASES(tcs)