|
@@ -1575,7 +1575,15 @@ static void ptrace_stop(int exit_code, int clear_code, siginfo_t *info)
|
|
read_lock(&tasklist_lock);
|
|
read_lock(&tasklist_lock);
|
|
if (may_ptrace_stop()) {
|
|
if (may_ptrace_stop()) {
|
|
do_notify_parent_cldstop(current, CLD_TRAPPED);
|
|
do_notify_parent_cldstop(current, CLD_TRAPPED);
|
|
|
|
+ /*
|
|
|
|
+ * Don't want to allow preemption here, because
|
|
|
|
+ * sys_ptrace() needs this task to be inactive.
|
|
|
|
+ *
|
|
|
|
+ * XXX: implement read_unlock_no_resched().
|
|
|
|
+ */
|
|
|
|
+ preempt_disable();
|
|
read_unlock(&tasklist_lock);
|
|
read_unlock(&tasklist_lock);
|
|
|
|
+ preempt_enable_no_resched();
|
|
schedule();
|
|
schedule();
|
|
} else {
|
|
} else {
|
|
/*
|
|
/*
|