|
@@ -214,20 +214,19 @@ struct pid *session_of_pgrp(struct pid *pgrp)
|
|
|
static int will_become_orphaned_pgrp(struct pid *pgrp, struct task_struct *ignored_task)
|
|
|
{
|
|
|
struct task_struct *p;
|
|
|
- int ret = 1;
|
|
|
|
|
|
do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
|
|
|
- if (p == ignored_task
|
|
|
- || p->exit_state
|
|
|
- || is_global_init(p->real_parent))
|
|
|
+ if ((p == ignored_task) ||
|
|
|
+ (p->exit_state && thread_group_empty(p)) ||
|
|
|
+ is_global_init(p->real_parent))
|
|
|
continue;
|
|
|
+
|
|
|
if (task_pgrp(p->real_parent) != pgrp &&
|
|
|
- task_session(p->real_parent) == task_session(p)) {
|
|
|
- ret = 0;
|
|
|
- break;
|
|
|
- }
|
|
|
+ task_session(p->real_parent) == task_session(p))
|
|
|
+ return 0;
|
|
|
} while_each_pid_task(pgrp, PIDTYPE_PGID, p);
|
|
|
- return ret; /* (sighing) "Often!" */
|
|
|
+
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
int is_current_pgrp_orphaned(void)
|