pthread_cancel.c   [plain text]


#include <pthread.h>

#include <darwintest.h>

static void *
run(void * __unused arg)
{
	while (true) {
		pthread_testcancel();
		sched_yield();
	}
}

T_DECL(pthread_cancel, "pthread_cancel",
		T_META_ALL_VALID_ARCHS(YES))
{
	pthread_t thread;
	void *join_result = NULL;
	T_ASSERT_POSIX_ZERO(pthread_create(&thread, NULL, run, NULL), NULL);
	T_ASSERT_POSIX_ZERO(pthread_cancel(thread), NULL);
	T_ASSERT_POSIX_ZERO(pthread_join(thread, &join_result), NULL);
	T_ASSERT_EQ(join_result, PTHREAD_CANCELED, NULL);
}