MFC r207848:
The thread_unsuspend() requires both process mutex and process spinlock locked. Postpone the process unlock till the thread_unsuspend() is called.
This commit is contained in:
parent
c32fbf547b
commit
4fa8113f97
@ -236,7 +236,6 @@ out:
|
|||||||
PROC_LOCK(p);
|
PROC_LOCK(p);
|
||||||
p->p_oppid = 0;
|
p->p_oppid = 0;
|
||||||
p->p_flag &= ~P_WAITED; /* XXX ? */
|
p->p_flag &= ~P_WAITED; /* XXX ? */
|
||||||
PROC_UNLOCK(p);
|
|
||||||
sx_xunlock(&proctree_lock);
|
sx_xunlock(&proctree_lock);
|
||||||
|
|
||||||
wakeup(td->td_proc); /* XXX for CTL_WAIT below ? */
|
wakeup(td->td_proc); /* XXX for CTL_WAIT below ? */
|
||||||
@ -249,9 +248,10 @@ out:
|
|||||||
*/
|
*/
|
||||||
case PROCFS_CTL_STEP:
|
case PROCFS_CTL_STEP:
|
||||||
error = proc_sstep(FIRST_THREAD_IN_PROC(p));
|
error = proc_sstep(FIRST_THREAD_IN_PROC(p));
|
||||||
|
if (error) {
|
||||||
PROC_UNLOCK(p);
|
PROC_UNLOCK(p);
|
||||||
if (error)
|
|
||||||
return (error);
|
return (error);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -260,7 +260,6 @@ out:
|
|||||||
*/
|
*/
|
||||||
case PROCFS_CTL_RUN:
|
case PROCFS_CTL_RUN:
|
||||||
p->p_flag &= ~P_STOPPED_SIG; /* this uses SIGSTOP */
|
p->p_flag &= ~P_STOPPED_SIG; /* this uses SIGSTOP */
|
||||||
PROC_UNLOCK(p);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -292,6 +291,7 @@ out:
|
|||||||
PROC_SLOCK(p);
|
PROC_SLOCK(p);
|
||||||
thread_unsuspend(p); /* If it can run, let it do so. */
|
thread_unsuspend(p); /* If it can run, let it do so. */
|
||||||
PROC_SUNLOCK(p);
|
PROC_SUNLOCK(p);
|
||||||
|
PROC_UNLOCK(p);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user