mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-04 18:28:30 +00:00
Put more thought into i/o polyfills
wait4() is now solid enough to run `make -j100` on Windows. You can now use MSG_DONTWAIT on Windows. There was a handle leak in accept() that's been fixed. Our WIN32 overlapped i/o code has been simplified. Priority class now inherits into subprocesses, so the verynice command will work and the signal mask will now be inherited by execve() and posix_spawn()
This commit is contained in:
parent
736fdb757a
commit
e961385e55
52 changed files with 679 additions and 487 deletions
|
@ -24,6 +24,7 @@
|
|||
#include "libc/intrin/asancodes.h"
|
||||
#include "libc/intrin/atomic.h"
|
||||
#include "libc/intrin/dll.h"
|
||||
#include "libc/intrin/getenv.internal.h"
|
||||
#include "libc/intrin/weaken.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/nt/files.h"
|
||||
|
@ -48,6 +49,18 @@ extern unsigned char __tls_add_nt_rax[];
|
|||
|
||||
_Alignas(TLS_ALIGNMENT) static char __static_tls[6016];
|
||||
|
||||
static unsigned long ParseMask(const char *str) {
|
||||
int c;
|
||||
unsigned long x = 0;
|
||||
if (str) {
|
||||
while ((c = *str++)) {
|
||||
x *= 10;
|
||||
x += c - '0';
|
||||
}
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables thread local storage for main process.
|
||||
*
|
||||
|
@ -210,6 +223,13 @@ textstartup void __enable_tls(void) {
|
|||
atomic_store_explicit(&tib->tib_tid, tid, memory_order_relaxed);
|
||||
// TODO(jart): set_tid_address?
|
||||
|
||||
// inherit signal mask
|
||||
if (IsWindows()) {
|
||||
atomic_store_explicit(&tib->tib_sigmask,
|
||||
ParseMask(__getenv(environ, "_MASK").s),
|
||||
memory_order_relaxed);
|
||||
}
|
||||
|
||||
// initialize posix threads
|
||||
_pthread_static.tib = tib;
|
||||
_pthread_static.pt_flags = PT_STATIC;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue