Blame src/regression/pthread_exit-cancel.c
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
#include <pthread.h>
|
|
Szabolcs Nagy |
cfa23c |
#include <string.h>
|
|
Szabolcs Nagy |
cfa23c |
#include "test.h"
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
#define TEST(r, f) if (((r)=(f))) t_error(
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
static void cleanup(void *arg)
|
|
Szabolcs Nagy |
cfa23c |
{
|
|
Szabolcs Nagy |
cfa23c |
*(int *)arg = 1;
|
|
Szabolcs Nagy |
cfa23c |
}
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
static void *start(void *arg)
|
|
Szabolcs Nagy |
cfa23c |
{
|
|
Szabolcs Nagy |
cfa23c |
pthread_cleanup_push(cleanup, arg);
|
|
Szabolcs Nagy |
cfa23c |
pthread_exit(0);
|
|
Szabolcs Nagy |
cfa23c |
pthread_cleanup_pop(0);
|
|
Szabolcs Nagy |
cfa23c |
return arg;
|
|
Szabolcs Nagy |
cfa23c |
}
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
int main(void)
|
|
Szabolcs Nagy |
cfa23c |
{
|
|
Szabolcs Nagy |
cfa23c |
pthread_t td;
|
|
Szabolcs Nagy |
cfa23c |
void *status;
|
|
Szabolcs Nagy |
cfa23c |
int arg = 0;
|
|
Szabolcs Nagy |
cfa23c |
int r;
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
TEST(r, pthread_create(&td, 0, start, &arg));
|
|
Szabolcs Nagy |
cfa23c |
TEST(r, pthread_join(td, &status));
|
|
Szabolcs Nagy |
cfa23c |
if (status)
|
|
Szabolcs Nagy |
cfa23c |
t_error("expected 0 thread exit status, got 0x%lx\n", (long)status);
|
|
Szabolcs Nagy |
cfa23c |
if (arg != 1)
|
|
Szabolcs Nagy |
cfa23c |
t_error("cleanup handler failed to run\n");
|
|
Szabolcs Nagy |
cfa23c |
return t_status;
|
|
Szabolcs Nagy |
cfa23c |
}
|