Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 May 2026 15:20:32 +0000
From:      ShengYi Hung <aokblast@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 2aff8c5e4ebf - stable/15 - libc: Fix cxa_thread_atexit{,nothr} test.
Message-ID:  <6a19aec0.30f9c.664d8354@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch stable/15 has been updated by aokblast:

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

commit 2aff8c5e4ebfef2d0146c22c179a18274ecd5dd2
Author:     ShengYi Hung <aokblast@FreeBSD.org>
AuthorDate: 2026-03-17 14:53:08 +0000
Commit:     ShengYi Hung <aokblast@FreeBSD.org>
CommitDate: 2026-05-29 15:19:48 +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
    
    (cherry picked from commit c25976f0a9a3a102ce47b45c19b2c93e8069433b)
---
 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?6a19aec0.30f9c.664d8354>