static void timer_task( LWMsgTask* task, void* data, LWMsgTaskTrigger trigger, LWMsgTaskTrigger* next_trigger, LWMsgTaskTime* next_time ) { int volatile * value = data; if (trigger & LWMSG_TASK_TRIGGER_INIT) { MU_VERBOSE("Waking up for the first time"); } else { MU_VERBOSE("Waking up on timer"); } if (*value < target) { (*value)++; *next_trigger = LWMSG_TASK_TRIGGER_TIME; *next_time = 10000000ll; } else { *next_trigger = 0; } }
MU_TEST(stress, parallel_print_protocol) { LWMsgContext* context = NULL; LWMsgDataContext* dcontext = NULL; LWMsgProtocol* protocol = NULL; char* text = NULL; MU_TRY(lwmsg_context_new(NULL, &context)); MU_TRY(lwmsg_data_context_new(context, &dcontext)); MU_TRY(lwmsg_protocol_new(context, &protocol)); MU_TRY(lwmsg_protocol_add_protocol_spec(protocol, counterprotocol_spec)); MU_TRY(lwmsg_protocol_print_alloc(protocol, 4, &text)); MU_VERBOSE("\n%s", text); }
static void* add_thread(void* _data) { Data *data = _data; int i; LWMsgCall* call = NULL; LWMsgParams in = LWMSG_PARAMS_INITIALIZER; LWMsgParams out = LWMSG_PARAMS_INITIALIZER; CounterAdd add; CounterReply* reply = NULL; pthread_mutex_lock(&data->lock); while (!data->go) { pthread_cond_wait(&data->event, &data->lock); } pthread_mutex_unlock(&data->lock); add.handle = data->handle; add.delta = 1; for (i = 0; i < data->iters; i++) { MU_TRY(lwmsg_peer_acquire_call(data->client, &call)); in.tag = COUNTER_ADD; in.data = &add; MU_TRY(lwmsg_call_dispatch(call, &in, &out, NULL, NULL)); MU_ASSERT_EQUAL(MU_TYPE_INTEGER, out.tag, COUNTER_ADD_SUCCESS); reply = (CounterReply*) out.data; MU_VERBOSE("(0x%lx) counter: %i -> %i", (unsigned long) (pthread_self()), reply->counter, reply->counter+1); lwmsg_call_destroy_params(call, &out); lwmsg_call_release(call); } return NULL; }