diff --git a/nx/source/kernel/thread.c b/nx/source/kernel/thread.c
index 8f5b223d..5ac1ea82 100644
--- a/nx/source/kernel/thread.c
+++ b/nx/source/kernel/thread.c
@@ -144,9 +144,10 @@ void threadExit(void) {
         if (!(tls_mask & ((UINT64_C(1) << i))))
             continue;
         if (t->tls_array[i]) {
-            if (g_tlsDestructors[i])
-                g_tlsDestructors[i](t->tls_array[i]);
+            void* old_value = t->tls_array[i];
             t->tls_array[i] = NULL;
+            if (g_tlsDestructors[i])
+                g_tlsDestructors[i](old_value);
         }
     }