lwp_data
create_lwp_waiter(struct lwp_data *d)
setup_lwp_context(&lwp_data[i], simple_test_waiter_lwp);
lwp_data[i].op_flags = flags;
lwp_data[i].futex_error = -1;
lwp_data[i].futex_ptr = &futex_word1;
lwp_data[i].block_val = 0;
lwp_data[i].bitset = 0;
lwp_data[i].wait_op = FUTEX_WAIT;
RL(_lwp_create(&lwp_data[i].context, 0, &lwp_data[i].lwpid));
ATF_REQUIRE_EQ_MSG(lwp_data[i].futex_error, -1,
i, lwp_data[i].futex_error);
RL(_lwp_wait(lwp_data[i].lwpid, NULL));
reap_lwp_waiter(struct lwp_data *d)
create_proc_waiter(struct lwp_data *d)
setup_lwp_context(&lwp_data[0], simple_test_waiter_lwp);
lwp_data[0].op_flags = 0;
lwp_data[0].futex_error = -1;
lwp_data[0].futex_ptr = &bs_addr[0];
lwp_data[0].block_val = 0;
lwp_data[0].bitset = 0;
lwp_data[0].wait_op = FUTEX_WAIT;
RL(_lwp_create(&lwp_data[0].context, 0, &lwp_data[0].lwpid));
ATF_REQUIRE_EQ_MSG(lwp_data[0].futex_error, -1,
"lwp_data[0].futex_error=%d", lwp_data[0].futex_error);
RL(_lwp_kill(lwp_data[0].threadid, SIGUSR1));
reap_lwp_waiter(&lwp_data[0]);
reap_proc_waiter(struct lwp_data *d)
struct lwp_data *d = arg;
struct lwp_data *d = arg;
setup_lwp_context(&lwp_data[0], lowpri_simple_test_waiter_lwp);
lwp_data[0].op_flags = FUTEX_PRIVATE_FLAG;
lwp_data[0].futex_error = -1;
lwp_data[0].futex_ptr = &futex_word;
lwp_data[0].block_val = 0;
lwp_data[0].bitset = 0;
lwp_data[0].wait_op = FUTEX_WAIT;
RL(_lwp_create(&lwp_data[0].context, 0, &lwp_data[0].lwpid));
ATF_REQUIRE_EQ_MSG(lwp_data[0].futex_error, -1,
"lwp_data[0].futex_error=%d", lwp_data[0].futex_error);
setup_lwp_context(&lwp_data[1], highpri_simple_test_waiter_lwp);
lwp_data[1].op_flags = FUTEX_PRIVATE_FLAG;
lwp_data[1].futex_error = -1;
lwp_data[1].futex_ptr = &futex_word;
lwp_data[1].block_val = 0;
lwp_data[1].bitset = 0;
lwp_data[1].wait_op = FUTEX_WAIT;
RL(_lwp_create(&lwp_data[1].context, 0, &lwp_data[1].lwpid));
ATF_REQUIRE_EQ_MSG(lwp_data[1].futex_error, -1,
"lwp_data[1].futex_error=%d", lwp_data[1].futex_error);
setup_lwp_context(struct lwp_data *d, void (*func)(void *))
ATF_REQUIRE_EQ_MSG(waiter, lwp_data[1].threadid,
(long)waiter, (long)lwp_data[1].threadid);
ATF_REQUIRE_EQ_MSG(waiter, lwp_data[0].threadid,
(long)waiter, (long)lwp_data[0].threadid);
struct lwp_data *d = arg;
struct lwp_data *d = &lwp_data[i];
memset(lwp_data, 0, sizeof(lwp_data));
struct lwp_data *d = arg;
void (*create_func)(struct lwp_data *),
void (*reap_func)(struct lwp_data *),
struct lwp_data *wlwp = &lwp_data[WAITER_LWP0];
struct lwp_data *wlwp0 = &lwp_data[WAITER_LWP0];
struct lwp_data *wlwp1 = &lwp_data[WAITER_LWP1];
setup_lwp_context(&lwp_data[i], simple_test_waiter_lwp);
lwp_data[i].op_flags = flags;
lwp_data[i].futex_error = -1;
lwp_data[i].bitset = __BIT(i);
lwp_data[i].wait_op = FUTEX_WAIT_BITSET;
lwp_data[i].futex_ptr = &futex_word;
lwp_data[i].block_val = 1;
struct lwp_data *wlwp0 = &lwp_data[WAITER_LWP0];
struct lwp_data *wlwp1 = &lwp_data[WAITER_LWP1];
struct lwp_data *wlwp2 = &lwp_data[WAITER_LWP2];
struct lwp_data *wlwp3 = &lwp_data[WAITER_LWP3];
setup_lwp_context(&lwp_data[i], simple_test_waiter_lwp);
lwp_data[i].op_flags = flags;
lwp_data[i].futex_error = -1;
lwp_data[i].futex_ptr = &futex_word;
lwp_data[i].block_val = 1;
lwp_data[i].bitset = 0;
lwp_data[i].wait_op = FUTEX_WAIT;
struct lwp_data lwp_data[NLWPS];
struct lwp_data *d = arg;
struct lwp_data *d = arg;
struct lwp_data *d = arg;
struct lwp_data *d = arg;
struct lwp_data *d = arg;
ATF_REQUIRE(_lwp_create(&lwp_data.context, 0, &lwp_data.lwpid) == 0);
ATF_REQUIRE(_lwp_wait(lwp_data.lwpid, NULL) == 0);
ATF_REQUIRE(lwp_data.set_robust_list_failed == false);
lwp_data.threadid);
ATF_REQUIRE(_lwp_create(&lwp_data.context, 0, &lwp_data.lwpid) == 0);
ATF_REQUIRE(_lwp_wait(lwp_data.lwpid, NULL) == 0);
ATF_REQUIRE(lwp_data.set_robust_list_failed == false);
lwp_data.threadid);
ATF_REQUIRE(_lwp_create(&lwp_data.context, 0, &lwp_data.lwpid) == 0);
ATF_REQUIRE(_lwp_wait(lwp_data.lwpid, NULL) == 0);
ATF_REQUIRE(lwp_data.set_robust_list_failed == false);
ATF_REQUIRE(_lwp_create(&lwp_data.context, 0, &lwp_data.lwpid) == 0);
ATF_REQUIRE(_lwp_wait(lwp_data.lwpid, NULL) == 0);
ATF_REQUIRE(lwp_data.set_robust_list_failed == false);
lwp_data.threadid);
ATF_REQUIRE(_lwp_create(&lwp_data.context, 0, &lwp_data.lwpid) == 0);
ATF_REQUIRE(_lwp_wait(lwp_data.lwpid, NULL) == 0);
ATF_REQUIRE(lwp_data.set_robust_list_failed == false);
lwp_data.threadid);
struct lwp_data lwp_data;
memset(&lwp_data, 0, sizeof(lwp_data));
lwp_data.stack_base = mmap(NULL, STACK_SIZE,
ATF_REQUIRE(lwp_data.stack_base != MAP_FAILED);
_lwp_makecontext(&lwp_data.context, func,
&lwp_data, NULL, lwp_data.stack_base, STACK_SIZE);
lwp_data.threadid = 0;
if (lwp_data.stack_base != NULL &&
lwp_data.stack_base != MAP_FAILED) {
(void) munmap(lwp_data.stack_base, STACK_SIZE);
memset(&lwp_data, 0, sizeof(lwp_data));