X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fsignal.c;h=58863ffa5670bdda9f25ff06e201c4e73f85a598;hb=0ae40112b9e0f2c42e89e14e9abe7d866c63d36a;hp=3e882cef168775f53367cf0561195bdfd9587495;hpb=96d6a1875e38ea878e1f1072683b6a471f1545ff;p=bertos.git diff --git a/bertos/kern/signal.c b/bertos/kern/signal.c index 3e882cef..58863ffa 100644 --- a/bertos/kern/signal.c +++ b/bertos/kern/signal.c @@ -117,7 +117,7 @@ sigmask_t sig_check(sigmask_t sigs) { sigmask_t result; - cpuflags_t flags; + cpu_flags_t flags; IRQ_SAVE_DISABLE(flags); result = CurrentProcess->sig_recv & sigs; @@ -135,12 +135,11 @@ sigmask_t sig_check(sigmask_t sigs) sigmask_t sig_wait(sigmask_t sigs) { sigmask_t result; - cpuflags_t flags; - extern int preempt_forbid_cnt; + cpu_flags_t flags; /* Sleeping with IRQs disabled or preemption forbidden is illegal */ IRQ_ASSERT_ENABLED(); - ASSERT(preempt_forbid_cnt == 0); + ASSERT(proc_allowed()); /* * This is subtle: there's a race condition where a concurrent @@ -164,13 +163,13 @@ sigmask_t sig_wait(sigmask_t sigs) CurrentProcess->sig_wait = sigs; /* - * Go to sleep and proc_schedule() another process. + * Go to sleep and proc_switch() to another process. * - * We re-enable IRQs because proc_schedule() does not + * We re-enable IRQs because proc_switch() does not * guarantee to save and restore the interrupt mask. */ IRQ_RESTORE(flags); - proc_schedule(); + proc_switch(); IRQ_SAVE_DISABLE(flags); /* @@ -203,7 +202,7 @@ sigmask_t sig_waitTimeout(sigmask_t sigs, ticks_t timeout) { Timer t; sigmask_t res; - cpuflags_t flags; + cpu_flags_t flags; ASSERT(!sig_check(SIG_TIMEOUT)); ASSERT(!(sigs & SIG_TIMEOUT)); @@ -234,7 +233,7 @@ sigmask_t sig_waitTimeout(sigmask_t sigs, ticks_t timeout) */ void sig_signal(Process *proc, sigmask_t sigs) { - cpuflags_t flags; + cpu_flags_t flags; /* See comment in sig_wait() for why this protection is necessary */ IRQ_SAVE_DISABLE(flags);