From 538ce338f40446b12590a61fdf6e45cee08e9355 Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Thu, 2 Jan 2025 19:09:57 -0800 Subject: [PATCH] Fix fork thread handle leak on windows --- libc/intrin/maps.c | 3 +-- libc/runtime/clone.c | 2 +- libc/testlib/benchmark.h | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/libc/intrin/maps.c b/libc/intrin/maps.c index 723d22c6b57..7f74960e1d5 100644 --- a/libc/intrin/maps.c +++ b/libc/intrin/maps.c @@ -24,7 +24,6 @@ #include "libc/dce.h" #include "libc/intrin/describebacktrace.h" #include "libc/intrin/dll.h" -#include "libc/intrin/kprintf.h" #include "libc/intrin/maps.h" #include "libc/macros.h" #include "libc/nexgen32e/rdtsc.h" @@ -92,7 +91,7 @@ void __maps_init(void) { // https://lwn.net/Articles/725832/. if we guess too small, then // slackmap will create a bunch of zombie stacks in __print_maps // to coverup the undisclosed memory but no cost if we guess big - size_t guardsize = (__maps.rand % 8 + 1) * 1000 * 1024; + size_t guardsize = 1024 * 1024; guardsize += __pagesize - 1; guardsize &= -__pagesize; diff --git a/libc/runtime/clone.c b/libc/runtime/clone.c index 7e57df5ddee..1cc0e3f24f2 100644 --- a/libc/runtime/clone.c +++ b/libc/runtime/clone.c @@ -118,7 +118,7 @@ textwindows static errno_t CloneWindows(int (*func)(void *), char *stk, wt->arg = arg; wt->tls = tls; wt->sp = tip & -16; - if ((h = CreateThread(&kNtIsInheritable, 65536, (void *)WinThreadEntry, wt, + if ((h = CreateThread(0, 65536, (void *)WinThreadEntry, wt, kNtStackSizeParamIsAReservation, &utid))) { atomic_init(ptid, utid); struct CosmoTib *tib = tls; diff --git a/libc/testlib/benchmark.h b/libc/testlib/benchmark.h index e7079509ea3..8915dfb6eb8 100644 --- a/libc/testlib/benchmark.h +++ b/libc/testlib/benchmark.h @@ -71,7 +71,7 @@ static void _print_benchmark_result(double total_nanos, double work_per_run, work_unit = " "; } - printf("%8.2f %-2s %8.2f %s/s %6.2f %s %2dx %s\n", time_value, time_unit, + printf("%8.2f %-2s %8.2f %s/s %6.2f %s %3dx %s\n", time_value, time_unit, throughput, throughput_unit, work_per_run, work_unit, iterations, code); }