Lines Matching refs:tid

49 static void _signal_deliver(rt_thread_t tid);
63 rt_thread_t tid = rt_thread_self(); in _signal_entry() local
71 tid->sp = tid->sig_ret; in _signal_entry()
72 tid->sig_ret = RT_NULL; in _signal_entry()
75 LOG_D("switch back to: 0x%08x\n", tid->sp); in _signal_entry()
76 RT_SCHED_CTX(tid).stat &= ~RT_THREAD_STAT_SIGNAL; in _signal_entry()
79 rt_hw_context_switch_to((rt_uintptr_t)&parameter, tid); in _signal_entry()
81 rt_hw_context_switch_to((rt_uintptr_t)&(tid->sp)); in _signal_entry()
95 static void _signal_deliver(rt_thread_t tid) in _signal_deliver() argument
102 if (!(tid->sig_pending & tid->sig_mask)) in _signal_deliver()
108 if ((RT_SCHED_CTX(tid).stat & RT_THREAD_SUSPEND_MASK) == RT_THREAD_SUSPEND_MASK) in _signal_deliver()
112 rt_thread_wakeup(tid); in _signal_deliver()
114 rt_thread_resume(tid); in _signal_deliver()
117 RT_SCHED_CTX(tid).stat |= (RT_THREAD_STAT_SIGNAL | RT_THREAD_STAT_SIGNAL_PENDING); in _signal_deliver()
126 if (tid == rt_thread_self()) in _signal_deliver()
129 RT_SCHED_CTX(tid).stat |= RT_THREAD_STAT_SIGNAL; in _signal_deliver()
139 else if (!((RT_SCHED_CTX(tid).stat & RT_THREAD_STAT_SIGNAL_MASK) & RT_THREAD_STAT_SIGNAL)) in _signal_deliver()
142 RT_SCHED_CTX(tid).stat |= (RT_THREAD_STAT_SIGNAL | RT_THREAD_STAT_SIGNAL_PENDING); in _signal_deliver()
148 cpu_id = RT_SCHED_CTX(tid).oncpu; in _signal_deliver()
159 RT_SCHED_CTX(tid).stat &= ~RT_THREAD_STAT_SIGNAL_PENDING; in _signal_deliver()
160 tid->sig_ret = tid->sp; in _signal_deliver()
161 tid->sp = rt_hw_stack_init((void *)_signal_entry, RT_NULL, in _signal_deliver()
162 (void *)((char *)tid->sig_ret - 32), RT_NULL); in _signal_deliver()
166 LOG_D("signal stack pointer @ 0x%08x", tid->sp); in _signal_deliver()
237 rt_thread_t tid = rt_thread_self(); in rt_signal_install() local
242 if (tid->sig_vectors == RT_NULL) in rt_signal_install()
246 rt_thread_alloc_sig(tid); in rt_signal_install()
251 if (tid->sig_vectors) in rt_signal_install()
253 old = tid->sig_vectors[signo]; in rt_signal_install()
255 if (handler == SIG_IGN) tid->sig_vectors[signo] = RT_NULL; in rt_signal_install()
256 else if (handler == SIG_DFL) tid->sig_vectors[signo] = _signal_default_handler; in rt_signal_install()
257 else tid->sig_vectors[signo] = handler; in rt_signal_install()
278 rt_thread_t tid = rt_thread_self(); in rt_signal_mask() local
282 tid->sig_mask &= ~sig_mask(signo); in rt_signal_mask()
301 rt_thread_t tid = rt_thread_self(); in rt_signal_unmask() local
305 tid->sig_mask |= sig_mask(signo); in rt_signal_unmask()
308 if (tid->sig_mask & tid->sig_pending) in rt_signal_unmask()
311 _signal_deliver(tid); in rt_signal_unmask()
337 rt_thread_t tid = rt_thread_self(); in rt_signal_wait() local
356 if (tid->sig_pending & *set) goto __done; in rt_signal_wait()
365 rt_thread_suspend_with_flag(tid, RT_UNINTERRUPTIBLE); in rt_signal_wait()
367 RT_SCHED_CTX(tid).stat |= RT_THREAD_STAT_SIGNAL_WAIT; in rt_signal_wait()
373 rt_timer_control(&(tid->thread_timer), in rt_signal_wait()
376 rt_timer_start(&(tid->thread_timer)); in rt_signal_wait()
386 RT_SCHED_CTX(tid).stat &= ~RT_THREAD_STAT_SIGNAL_WAIT; in rt_signal_wait()
389 if (tid->error == -RT_ETIMEOUT) in rt_signal_wait()
391 tid->error = RT_EOK; in rt_signal_wait()
401 si_node = (struct siginfo_node *)tid->si_list; in rt_signal_wait()
420 tid->si_list = node_next; in rt_signal_wait()
424 tid->si_list = RT_NULL; in rt_signal_wait()
429 tid->sig_pending &= ~sig_mask(signo); in rt_signal_wait()
456 rt_thread_t tid = rt_thread_self(); in rt_thread_handle_sig() local
460 if (tid->sig_pending & tid->sig_mask) in rt_thread_handle_sig()
463 if (!(RT_SCHED_CTX(tid).stat & RT_THREAD_STAT_SIGNAL_WAIT)) in rt_thread_handle_sig()
465 while (tid->sig_pending & tid->sig_mask) in rt_thread_handle_sig()
470 si_node = (struct siginfo_node *)tid->si_list; in rt_thread_handle_sig()
475 tid->si_list = RT_NULL; in rt_thread_handle_sig()
477tid->si_list = (void *)rt_slist_entry(si_node->list.next, struct siginfo_node, list); in rt_thread_handle_sig()
480 handler = tid->sig_vectors[signo]; in rt_thread_handle_sig()
481 tid->sig_pending &= ~sig_mask(signo); in rt_thread_handle_sig()
492 tid->error = error; in rt_thread_handle_sig()
498 RT_SCHED_CTX(tid).stat &= ~RT_THREAD_STAT_SIGNAL; in rt_thread_handle_sig()
510 void rt_thread_alloc_sig(rt_thread_t tid) in rt_thread_alloc_sig() argument
527 if (tid->sig_vectors == RT_NULL) in rt_thread_alloc_sig()
529 tid->sig_vectors = vectors; in rt_thread_alloc_sig()
544 void rt_thread_free_sig(rt_thread_t tid) in rt_thread_free_sig() argument
551 si_node = (struct siginfo_node *)tid->si_list; in rt_thread_free_sig()
552 tid->si_list = RT_NULL; in rt_thread_free_sig()
554 sig_vectors = tid->sig_vectors; in rt_thread_free_sig()
555 tid->sig_vectors = RT_NULL; in rt_thread_free_sig()
590 int rt_thread_kill(rt_thread_t tid, int sig) in rt_thread_kill() argument
596 RT_ASSERT(tid != RT_NULL); in rt_thread_kill()
605 if (tid->sig_pending & sig_mask(sig)) in rt_thread_kill()
611 si_node = (struct siginfo_node *)tid->si_list; in rt_thread_kill()
639 if (tid->si_list) in rt_thread_kill()
643 si_list = (struct siginfo_node *)tid->si_list; in rt_thread_kill()
648 tid->si_list = si_node; in rt_thread_kill()
652 tid->sig_pending |= sig_mask(sig); in rt_thread_kill()
663 _signal_deliver(tid); in rt_thread_kill()