Example #1
0
static void __tt_wq_add_event (TT_WQ_T *wait_queue)
{
	TT_THREAD_T *thread = tt_thread_self ();
	
	listMove (&wait_queue->list, &thread->list_schedule);
	thread->wait_parent = wait_queue;
}
Example #2
0
/* Available in: thread. */
int tt_wq_wait_event_timeout (TT_WQ_T *wait_queue, uint32_t msec)
{
    __TIMEOUT_WQ_T wq_args;

    wq_args.wait_queue	= wait_queue;
    wq_args.thread		= tt_thread_self ();

    if (tt_is_irq_disabled ())
    {
        int i;
        __tt_wq_add_event (wait_queue);

        for (i = 0; tt_is_irq_disabled (); ++i)
            tt_enable_irq ();

        tt_timer_start (&wq_args.timer, __tt_wq_wakeup, &wq_args, msec);
        tt_syscall ((void *)&wq_args, __tt_wq_schedule_timeout);
        tt_timer_kill (&wq_args.timer);

        while (i-- != 0)
            tt_disable_irq ();
    }
    else
    {
        tt_timer_start (&wq_args.timer, __tt_wq_wakeup, &wq_args, msec);
        tt_syscall ((void *)&wq_args, __tt_wq_wait_event_timeout);
        tt_timer_kill (&wq_args.timer);
    }
    return wq_args.result;
}