c->wait_queue(&_queue);
c->sender_enqueue(&_queue, c->sched_context()->prio());
- c->state_change_dirty(~Thread_ready, Thread_ipc_in_progress);
+ c->state_change_dirty(~Thread_ready, Thread_send_wait);
IPC_timeout timeout;
if (t)
c->schedule();
// We go here by: (a) a wakeup, (b) a timeout, (c) wait_queue delete,
// (d) ex_regs
+ c->state_del_dirty(~Thread_ipc_mask);
// The wait_queue was destroyed
if (EXPECT_FALSE(!_valid))
Thread *w = static_cast<Thread*>(Sender::cast(h));
w->sender_dequeue(&_queue);
- w->state_change_dirty(~Thread_ipc_in_progress, Thread_ready);
+ w->state_change_dirty(~Thread_ipc_mask, Thread_ready);
w->reset_timeout();
w->wait_queue(0);
{
Thread *w = static_cast<Thread*>(Sender::cast(h));
w->sender_dequeue(&_queue);
- w->state_change_safely(~Thread_ipc_in_progress, Thread_ready);
+ w->state_change_safely(~Thread_ipc_mask, Thread_ready);
w->ready_enqueue();
w->reset_timeout();
}