41,6 → 41,19 |
#include <errno.h> |
#include <arch.h> |
|
static void udebug_wait_for_go(waitq_t *wq) |
{ |
int rc; |
ipl_t ipl; |
|
ipl = waitq_sleep_prepare(wq); |
|
wq->missed_wakeups = 0; /* Enforce blocking. */ |
rc = waitq_sleep_timeout_unsafe(wq, SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE); |
|
waitq_sleep_finish(wq, rc, ipl); |
} |
|
void udebug_stoppable_begin(void) |
{ |
int nsc; |
158,8 → 171,8 |
spinlock_unlock(&TASK->lock); |
interrupts_restore(ipl); |
|
//klog_printf("udebug_stoppable_end: waitq_sleep"); |
waitq_sleep(&THREAD->go_wq); |
udebug_wait_for_go(&THREAD->go_wq); |
|
goto restart; |
/* must try again - have to lose stoppability atomically */ |
} else { |
222,10 → 235,9 |
spinlock_lock(&TASK->lock); |
ipc_answer(&TASK->answerbox, THREAD->debug_go_call); |
spinlock_unlock(&TASK->lock); |
|
interrupts_restore(ipl); |
|
waitq_sleep(&THREAD->go_wq); |
udebug_wait_for_go(&THREAD->go_wq); |
} |
|
void udebug_thread_b_event(struct thread *t) |
272,8 → 284,7 |
|
interrupts_restore(ipl); |
klog_printf("- sleep"); |
|
waitq_sleep(&THREAD->go_wq); |
udebug_wait_for_go(&THREAD->go_wq); |
} |
|
void udebug_thread_e_event(void) |