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:
Justine Tunney 2022-11-10 21:52:47 -08:00
parent b46ac13504
commit f2af97711b
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
114 changed files with 902 additions and 363 deletions

View file

@ -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();

View file

@ -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));
}

View file

@ -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();

View file

@ -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);