| ... | ... | @@ -1147,6 +1147,11 @@ const LinuxThreadImpl = struct { |
| 1147 | 1147 | /// Ported over from musl libc's pthread detached implementation: |
| 1148 | 1148 | /// https://github.com/ifduyue/musl/search?q=__unmapself |
| 1149 | 1149 | fn freeAndExit(self: *ThreadCompletion) noreturn { |
| 1150 | // If we do not reset the child_tidptr to null here, the kernel would later write the |
| 1151 | // value zero to that address, which is inside the block we're unmapping below, after |
| 1152 | // our thread exits. This can sometimes corrupt memory in other mmap blocks from |
| 1153 | // unrelated concurrent threads. |
| 1154 | _ = linux.set_tid_address(null); |
| 1150 | 1155 | // If a signal were delivered between SYS_munmap and SYS_exit, any installed signal |
| 1151 | 1156 | // handler would immediately segfault due to the stack being unmapped. To avoid this, |
| 1152 | 1157 | // we need to mask all signals before entering the inline asm. |