Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Mar 2026 02:48:35 +0000
From:      ShengYi Hung <aokblast@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: c25976f0a9a3 - main - libc: Fix cxa_thread_atexit{,nothr} test.
Message-ID:  <69bf5883.46f32.5d9349e3@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by aokblast:

URL: https://cgit.FreeBSD.org/src/commit/?id=c25976f0a9a3a102ce47b45c19b2c93e8069433b

commit c25976f0a9a3a102ce47b45c19b2c93e8069433b
Author:     ShengYi Hung <aokblast@FreeBSD.org>
AuthorDate: 2026-03-17 14:53:08 +0000
Commit:     ShengYi Hung <aokblast@FreeBSD.org>
CommitDate: 2026-03-22 02:48:24 +0000

    libc: Fix cxa_thread_atexit{,nothr} test.
    
    After patch 9d26b82, we don't provide recursive call protection anymore.
    Therefore, to pass the test, we adjust the testcase by protecting on
    caller and the testcase is to make sure the dtors is properly handled.
    
    Reported by:    siva
    Reviewed by:    kib
    Approved by:    markj (mentor)
    Fixes:  9d26b82826d9 ("libc: Fix dtor order in __cxa_thread_atexit")
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    Differential Revision: https://reviews.freebsd.org/D55893
---
 lib/libc/tests/stdlib/cxa_thread_atexit_nothr_test.cc | 11 ++++++++---
 lib/libc/tests/stdlib/cxa_thread_atexit_test.cc       | 10 ++++++++--
 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)


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69bf5883.46f32.5d9349e3>