Subversion Repositories HelenOS

Rev

Rev 2825 | Rev 2827 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2825 Rev 2826
Line 108... Line 108...
108
    task_t *ta;
108
    task_t *ta;
109
    ipl_t ipl;
109
    ipl_t ipl;
110
 
110
 
111
    klog_printf("debug_go()");
111
    klog_printf("debug_go()");
112
    ta = get_lock_callee_task(phone);
112
    ta = get_lock_callee_task(phone);
113
 
-
 
114
    // FIXME: must save this in thread struct, not task struct!!!
-
 
115
    ta->debug_go_call = call;
-
 
116
    spinlock_unlock(&ta->lock);
113
    spinlock_unlock(&ta->lock);
-
 
114
    // TODO: don't lock ta
117
 
115
 
118
    t = (thread_t *) IPC_GET_ARG2(call->data);
116
    t = (thread_t *) IPC_GET_ARG2(call->data);
119
 
117
 
120
    ipl = interrupts_disable();
118
    ipl = interrupts_disable();
121
    spinlock_lock(&threads_lock);
119
    spinlock_lock(&threads_lock);
122
 
120
 
-
 
121
    /* Verify that 't' exists and belongs to task 'ta' */
123
    if (!thread_exists(t)) {
122
    if (!thread_exists(t) || (t->task != ta)) {
124
        spinlock_unlock(&threads_lock);
123
        spinlock_unlock(&threads_lock);
125
        interrupts_restore(ipl);
124
        interrupts_restore(ipl);
126
        return ENOENT;
125
        return ENOENT;
127
    }
126
    }
128
 
127
 
-
 
128
    t->debug_go_call = call;
129
    t->debug_stop = false;
129
    t->debug_stop = false;
130
    waitq_wakeup(&t->go_wq, WAKEUP_FIRST);
130
    waitq_wakeup(&t->go_wq, WAKEUP_FIRST);
131
 
131
 
132
    spinlock_unlock(&threads_lock);
132
    spinlock_unlock(&threads_lock);
133
    interrupts_restore(ipl);
133
    interrupts_restore(ipl);