diff options
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 5447dc7defa9..7d164e25b0f0 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -174,8 +174,10 @@ static inline void free_signal_struct(struct signal_struct *sig)  static inline void put_signal_struct(struct signal_struct *sig)  { -	if (atomic_dec_and_test(&sig->sigcnt)) +	if (atomic_dec_and_test(&sig->sigcnt)) { +		sched_autogroup_exit(sig);  		free_signal_struct(sig); +	}  }  void __put_task_struct(struct task_struct *tsk) @@ -905,6 +907,7 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)  	posix_cpu_timers_init_group(sig);  	tty_audit_fork(sig); +	sched_autogroup_fork(sig);  	sig->oom_adj = current->signal->oom_adj;  	sig->oom_score_adj = current->signal->oom_score_adj; @@ -1315,7 +1318,7 @@ bad_fork_cleanup_mm:  	}  bad_fork_cleanup_signal:  	if (!(clone_flags & CLONE_THREAD)) -		free_signal_struct(p->signal); +		put_signal_struct(p->signal);  bad_fork_cleanup_sighand:  	__cleanup_sighand(p->sighand);  bad_fork_cleanup_fs:  | 
