| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 3acc89f commit aaf2f82
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -14,6 +14,7 @@ | |||
| 14 | 14 | ||
| 15 | 15 | #include "libplatform/libplatform.h" | |
| 16 | 16 | ||
| 17 | + #include <algorithm> | ||
| 17 | 18 | #include <string.h> | |
| 18 | 19 | #include <sstream> | |
| 19 | 20 | #include <unordered_map> | |
@@ -101,12 +102,18 @@ static int StartDebugSignalHandler() { | |||
| 101 | 102 | CHECK_EQ(0, uv_sem_init(&start_io_thread_semaphore, 0)); | |
| 102 | 103 | pthread_attr_t attr; | |
| 103 | 104 | CHECK_EQ(0, pthread_attr_init(&attr)); | |
| 104 | - // Don't shrink the thread's stack on FreeBSD. Said platform decided to | ||
| 105 | - // follow the pthreads specification to the letter rather than in spirit: | ||
| 106 | - // https://lists.freebsd.org/pipermail/freebsd-current/2014-March/048885.html | ||
| 107 | - #ifndef __FreeBSD__ | ||
| 108 | - CHECK_EQ(0, pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN)); | ||
| 109 | - #endif // __FreeBSD__ | ||
| 105 | + #if defined(PTHREAD_STACK_MIN) && !defined(__FreeBSD__) | ||
| 106 | + // PTHREAD_STACK_MIN is 2 KB with musl libc, which is too small to safely | ||
| 107 | + // receive signals. PTHREAD_STACK_MIN + MINSIGSTKSZ is 8 KB on arm64, which | ||
| 108 | + // is the musl architecture with the biggest MINSIGSTKSZ so let's use that | ||
| 109 | + // as a lower bound and let's quadruple it just in case. The goal is to avoid | ||
| 110 | + // creating a big 2 or 4 MB address space gap (problematic on 32 bits | ||
| 111 | + // because of fragmentation), not squeeze out every last byte. | ||
| 112 | + // Omitted on FreeBSD because it doesn't seem to like small stacks. | ||
| 113 | + const size_t stack_size = std::max(static_cast<size_t>(4 * 8192), | ||
| 114 | + static_cast<size_t>(PTHREAD_STACK_MIN)); | ||
| 115 | + CHECK_EQ(0, pthread_attr_setstacksize(&attr, stack_size)); | ||
| 116 | + #endif // defined(PTHREAD_STACK_MIN) && !defined(__FreeBSD__) | ||
| 110 | 117 | CHECK_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)); | |
| 111 | 118 | sigset_t sigmask; | |
| 112 | 119 | // Mask all signals. | |
| Back | FazBrowse Home | New Git URL |
0 commit comments