mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-28 00:02:28 +00:00
Make improvements
- Improve compatibility with Blink virtual machine - Add non-POSIX APIs for joining threads and signal masks - Never ever use anything except 32-bit integers for atomics - Add some `#undef` statements to workaround `ctags` problems
This commit is contained in:
parent
b46ac13504
commit
f2af97711b
114 changed files with 902 additions and 363 deletions
|
@ -32,7 +32,7 @@
|
|||
int pfds[2];
|
||||
pthread_cond_t cv;
|
||||
pthread_mutex_t mu;
|
||||
atomic_bool gotcleanup;
|
||||
atomic_int gotcleanup;
|
||||
char testlib_enable_tmp_setup_teardown;
|
||||
|
||||
void SetUp(void) {
|
||||
|
@ -198,7 +198,7 @@ TEST(pthread_cancel, condDeferredWaitDelayed) {
|
|||
char *wouldleak;
|
||||
pthread_key_t key;
|
||||
bool key_destructor_was_run;
|
||||
atomic_bool is_in_infinite_loop;
|
||||
atomic_int is_in_infinite_loop;
|
||||
|
||||
void KeyDestructor(void *arg) {
|
||||
CheckStackIsAligned();
|
||||
|
|
|
@ -201,11 +201,11 @@ TEST(pthread_exit, fromMainThread_whenNoThreadsWereCreated) {
|
|||
EXITS(0);
|
||||
}
|
||||
|
||||
atomic_bool g_cleanup1;
|
||||
atomic_bool g_cleanup2;
|
||||
atomic_int g_cleanup1;
|
||||
atomic_int g_cleanup2;
|
||||
|
||||
void OnCleanup(void *arg) {
|
||||
*(atomic_bool *)arg = true;
|
||||
*(atomic_int *)arg = true;
|
||||
}
|
||||
|
||||
void *CleanupExit(void *arg) {
|
||||
|
@ -263,10 +263,11 @@ static void CreateDetach(void) {
|
|||
|
||||
// this is really fast
|
||||
static void CreateDetached(void) {
|
||||
pthread_t th;
|
||||
pthread_attr_t attr;
|
||||
ASSERT_EQ(0, pthread_attr_init(&attr));
|
||||
ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED));
|
||||
ASSERT_EQ(0, pthread_create(0, &attr, Increment, 0));
|
||||
ASSERT_EQ(0, pthread_create(&th, &attr, Increment, 0));
|
||||
ASSERT_EQ(0, pthread_attr_destroy(&attr));
|
||||
}
|
||||
|
||||
|
|
|
@ -58,10 +58,11 @@ TEST(pthread_detach, testCreateReturn) {
|
|||
}
|
||||
|
||||
TEST(pthread_detach, testDetachUponCreation) {
|
||||
pthread_t th;
|
||||
pthread_attr_t attr;
|
||||
ASSERT_EQ(0, pthread_attr_init(&attr));
|
||||
ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED));
|
||||
ASSERT_EQ(0, pthread_create(0, &attr, Increment, 0));
|
||||
ASSERT_EQ(0, pthread_create(&th, &attr, Increment, 0));
|
||||
ASSERT_EQ(0, pthread_attr_destroy(&attr));
|
||||
while (!pthread_orphan_np()) {
|
||||
pthread_decimate_np();
|
||||
|
|
|
@ -38,6 +38,7 @@ void *Worker(void *arg) {
|
|||
}
|
||||
|
||||
TEST(pthread_exit, joinableOrphanedChild_runsAtexitHandlers) {
|
||||
pthread_t th;
|
||||
pthread_attr_t attr;
|
||||
SPAWN(fork);
|
||||
atexit(OnExit);
|
||||
|
@ -45,13 +46,14 @@ TEST(pthread_exit, joinableOrphanedChild_runsAtexitHandlers) {
|
|||
main_thread = pthread_self();
|
||||
ASSERT_EQ(0, pthread_attr_init(&attr));
|
||||
ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE));
|
||||
ASSERT_EQ(0, pthread_create(0, &attr, Worker, 0));
|
||||
ASSERT_EQ(0, pthread_create(&th, &attr, Worker, 0));
|
||||
ASSERT_EQ(0, pthread_attr_destroy(&attr));
|
||||
pthread_exit(0);
|
||||
EXITS(CHILD);
|
||||
}
|
||||
|
||||
TEST(pthread_exit, detachedOrphanedChild_runsAtexitHandlers) {
|
||||
pthread_t th;
|
||||
pthread_attr_t attr;
|
||||
SPAWN(fork);
|
||||
atexit(OnExit);
|
||||
|
@ -59,7 +61,7 @@ TEST(pthread_exit, detachedOrphanedChild_runsAtexitHandlers) {
|
|||
main_thread = pthread_self();
|
||||
ASSERT_EQ(0, pthread_attr_init(&attr));
|
||||
ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED));
|
||||
ASSERT_EQ(0, pthread_create(0, &attr, Worker, 0));
|
||||
ASSERT_EQ(0, pthread_create(&th, &attr, Worker, 0));
|
||||
ASSERT_EQ(0, pthread_attr_destroy(&attr));
|
||||
pthread_exit(0);
|
||||
EXITS(CHILD);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue