[libc-commits] [libc] [libc] Reset thread-specific key value before invoking destructor (PR #226134)

Pavel Labath via libc-commits libc-commits at lists.llvm.org
Tue Sep 29 04:06:15 PDT 2026


================
@@ -78,8 +78,57 @@ static void null_value_test() {
   ASSERT_EQ(LIBC_NAMESPACE::pthread_key_delete(key), 0);
 }
 
+static void *dtor_getspecific_val;
+static void dtor_verify_getspecific_nullptr(void *) {
+  dtor_getspecific_val = LIBC_NAMESPACE::pthread_getspecific(key);
+}
+
+static void *func_getspecific_nullptr(void *) {
+  ASSERT_EQ(LIBC_NAMESPACE::pthread_setspecific(key, &child_thread_data), 0);
+  return nullptr;
+}
+
+static void getspecific_nullptr_in_dtor_test() {
+  pthread_t th;
+  dtor_getspecific_val = &dtor_getspecific_val;
+  ASSERT_EQ(LIBC_NAMESPACE::pthread_key_create(
+                &key, &dtor_verify_getspecific_nullptr),
+            0);
+  ASSERT_EQ(LIBC_NAMESPACE::pthread_create(&th, nullptr,
+                                           &func_getspecific_nullptr, nullptr),
+            0);
+  ASSERT_EQ(LIBC_NAMESPACE::pthread_join(th, nullptr), 0);
+  ASSERT_EQ(dtor_getspecific_val, nullptr);
+  ASSERT_EQ(LIBC_NAMESPACE::pthread_key_delete(key), 0);
+}
+
+static int dtor_call_count = 0;
----------------
labath wrote:

Good idea. I've added a test for that.

https://github.com/llvm/llvm-project/pull/226134


More information about the libc-commits mailing list