Make umtxq_check_susp() to correctly handle thread exit requests.
The check for P_SINGLE_EXIT was shadowed by the (P_SHOULDSTOP || traced) check. Reported by: bdrewery (might be) Reviewed by: markj Tested by: pho MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D21124
This commit is contained in:
parent
8a34b17735
commit
457fb14519
@ -723,13 +723,11 @@ umtxq_check_susp(struct thread *td, bool sleep)
|
||||
error = 0;
|
||||
p = td->td_proc;
|
||||
PROC_LOCK(p);
|
||||
if (P_SHOULDSTOP(p) ||
|
||||
((p->p_flag & P_TRACED) && (td->td_dbgflags & TDB_SUSPEND))) {
|
||||
if (p->p_flag & P_SINGLE_EXIT)
|
||||
error = EINTR;
|
||||
else
|
||||
error = sleep ? thread_suspend_check(0) : ERESTART;
|
||||
}
|
||||
if (p->p_flag & P_SINGLE_EXIT)
|
||||
error = EINTR;
|
||||
else if (P_SHOULDSTOP(p) ||
|
||||
((p->p_flag & P_TRACED) && (td->td_dbgflags & TDB_SUSPEND)))
|
||||
error = sleep ? thread_suspend_check(0) : ERESTART;
|
||||
PROC_UNLOCK(p);
|
||||
return (error);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user