mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-12 14:09:12 +00:00
Improve cancellations, randomness, and time
- Exhaustively document cancellation points - Rename SIGCANCEL to SIGTHR just like BSDs - Further improve POSIX thread cancellations - Ensure asynchronous cancellations work correctly - Elevate the quality of getrandom() and getentropy() - Make futexes cancel correctly on OpenBSD 6.x and 7.x - Add reboot.com and shutdown.com to examples directory - Remove underscore prefix from awesome timespec_*() APIs - Create assertions that help verify our cancellation points - Remove bad timespec APIs (cmp generalizes eq/ne/gt/gte/lt/lte)
This commit is contained in:
parent
0d7c265392
commit
3f0bcdc3ef
173 changed files with 1599 additions and 782 deletions
|
@ -34,10 +34,10 @@ char *getenv(const char *s) {
|
|||
if (!(p = environ)) return 0;
|
||||
e = _getenv(p, s);
|
||||
#if SYSDEBUG
|
||||
if (!(s[0] == 'T' && s[1] == 'Z' && !s[2])) {
|
||||
// TODO(jart): memoize TZ or something
|
||||
STRACE("getenv(%#s) → %#s", s, e.s);
|
||||
}
|
||||
// if (!(s[0] == 'T' && s[1] == 'Z' && !s[2])) {
|
||||
// TODO(jart): memoize TZ or something
|
||||
STRACE("getenv(%#s) → %#s", s, e.s);
|
||||
//}
|
||||
#endif
|
||||
return e.s;
|
||||
}
|
||||
|
|
|
@ -61,12 +61,12 @@ kSignalNames:
|
|||
.e SIGWINCH,"SIGWINCH"
|
||||
.e SIGIO,"SIGIO"
|
||||
.e SIGSYS,"SIGSYS"
|
||||
.e SIGINFO,"SIGINFO"
|
||||
.e SIGCANCEL,"SIGCANCEL"
|
||||
.e SIGPWR,"SIGPWR"
|
||||
.e SIGINFO,"SIGINFO" # order matters
|
||||
.e SIGTHR,"SIGTHR" # order matters
|
||||
.e SIGRTMAX,"SIGRTMAX"
|
||||
.e SIGRTMIN,"SIGRTMIN"
|
||||
.e SIGEMT,"SIGEMT"
|
||||
.e SIGPWR,"SIGPWR"
|
||||
.e SIGEMT,"SIGEMT" # order matters
|
||||
.long MAGNUM_TERMINATOR
|
||||
.endobj kSignalNames,globl,hidden
|
||||
.overrun
|
||||
|
|
|
@ -29,6 +29,8 @@
|
|||
* key's value is nonzero. The key's value is set to zero before it gets
|
||||
* called. The ordering for multiple destructor calls is unspecified.
|
||||
*
|
||||
* The result should be passed to pthread_key_delete() later.
|
||||
*
|
||||
* @param key is set to the allocated key on success
|
||||
* @param dtor specifies an optional destructor callback
|
||||
* @return 0 on success, or errno on error
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/blockcancel.internal.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/thread/posixthread.internal.h"
|
||||
#include "libc/thread/thread.h"
|
||||
|
@ -76,3 +77,13 @@ errno_t pthread_setcancelstate(int state, int *oldstate) {
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int _pthread_block_cancellations(void) {
|
||||
int oldstate;
|
||||
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);
|
||||
return oldstate;
|
||||
}
|
||||
|
||||
void _pthread_allow_cancellations(int oldstate) {
|
||||
pthread_setcancelstate(oldstate, 0);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
M(SIGKILL)
|
||||
M(SIGABRT)
|
||||
M(SIGSTOP)
|
||||
M(SIGCANCEL)
|
||||
M(SIGTHR)
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#define ShouldUseMsabiAttribute() 1
|
||||
#include "libc/assert.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/nt/errors.h"
|
||||
|
@ -34,6 +35,7 @@ privileged int64_t __winerr(void) {
|
|||
errno_t e;
|
||||
if (IsWindows()) {
|
||||
e = __dos2errno(__imp_GetLastError());
|
||||
_npassert(e > 0);
|
||||
} else {
|
||||
e = ENOSYS;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue