* <pre>
* - Synchronous-signal delivery:
*
- * P1__ __P2
- * \ /
- * \__sig_send()____proc_wakeup()__/
+ * [P1]____sig_send()____proc_wakeup()____[P2]
* </pre>
*
* In the asynchronous case, the process is scheduled for execution as a
* <pre>
* - Asynchronous-signal delivery:
*
- * P1__ __P1__ __P2
- * \ / \ /
- * \__sig_post()__/ \__proc_schedule()__/
+ * [P1]____sig_post()____[P1]____proc_schedule()____[P2]
* </pre>
*
* In this way, any execution context, including an interrupt handler, can
{
cpu_flags_t flags;
- if (UNLIKELY(proc == current_process))
- return;
-
IRQ_SAVE_DISABLE(flags);
/* Set the signals */
/* Check if process needs to be awoken */
if (proc->sig_recv & proc->sig_wait)
{
+ ASSERT(proc != current_process);
+
proc->sig_wait = 0;
if (wakeup)
proc_wakeup(proc);