Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 961c4675 authored by Oleg Nesterov's avatar Oleg Nesterov
Browse files

has_stopped_jobs: s/task_is_stopped/SIGNAL_STOP_STOPPED/



has_stopped_jobs() naively checks task_is_stopped(group_leader). This
was always wrong even without ptrace, group_leader can be dead. And
given that ptrace can change the state to TRACED this is wrong even
in the single-threaded case.

Change the code to check SIGNAL_STOP_STOPPED and simplify the code,
retval + break/continue doesn't make this trivial code more readable.

We could probably add the usual "|| signal->group_stop_count" check
but I don't think this makes sense, the task can start the group-stop
right after the check anyway.

Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Acked-by: default avatarTejun Heo <tj@kernel.org>
parent bb188d7e
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -266,18 +266,16 @@ int is_current_pgrp_orphaned(void)
	return retval;
}

static int has_stopped_jobs(struct pid *pgrp)
static bool has_stopped_jobs(struct pid *pgrp)
{
	int retval = 0;
	struct task_struct *p;

	do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
		if (!task_is_stopped(p))
			continue;
		retval = 1;
		break;
		if (p->signal->flags & SIGNAL_STOP_STOPPED)
			return true;
	} while_each_pid_task(pgrp, PIDTYPE_PGID, p);
	return retval;

	return false;
}

/*