version 1.21, 2004/06/03 00:31:28 |
version 1.22, 2004/06/03 15:22:08 |
|
|
td_thr_suspend(td_thread_t *thread) |
td_thr_suspend(td_thread_t *thread) |
{ |
{ |
int tmp, tmp1, val; |
int tmp, tmp1, val; |
caddr_t addr, sp, nthread, qaddr; |
caddr_t addr, sp, nthreadaddr, qaddr; |
|
td_thread_t *nthread; |
struct reg r; |
struct reg r; |
struct fpreg fr; |
struct fpreg fr; |
ucontext_t uc; |
ucontext_t uc; |
Line 1151 td_thr_suspend(td_thread_t *thread) |
|
Line 1152 td_thr_suspend(td_thread_t *thread) |
|
} |
} |
} |
} |
|
|
nthread = (caddr_t)(void *)qhead.ptqh_first; |
nthreadaddr = (caddr_t)(void *)qhead.ptqh_first; |
DPTQ_REMOVE(qaddr, nthread, pt_runq); |
DPTQ_REMOVE(qaddr, nthreadaddr, pt_runq); |
val = READ(thread->proc, |
val = READ(thread->proc, |
nthread + offsetof(struct __pthread_st, pt_trapuc), |
nthreadaddr + offsetof(struct __pthread_st, pt_trapuc), |
&addr, sizeof(addr)); |
&addr, sizeof(addr)); |
if (val != 0) |
if (val != 0) |
return val; |
return val; |
if (addr == 0) { |
if (addr == 0) { |
val = READ(thread->proc, |
val = READ(thread->proc, |
nthread + offsetof(struct __pthread_st, pt_uc), |
nthreadaddr + offsetof(struct __pthread_st, pt_uc), |
&addr, sizeof(addr)); |
&addr, sizeof(addr)); |
if (val != 0) |
if (val != 0) |
return val; |
return val; |
Line 1177 td_thr_suspend(td_thread_t *thread) |
|
Line 1178 td_thr_suspend(td_thread_t *thread) |
|
if (val != 0) |
if (val != 0) |
return val; |
return val; |
|
|
|
td__getthread(thread->proc, nthreadaddr, &nthread); |
nthread->lwp = thread->lwp; |
nthread->lwp = thread->lwp; |
thread->lwp = -1; |
thread->lwp = -1; |
break; |
break; |