Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 24559
b: refs/heads/master
c: 6b3934e
h: refs/heads/master
i:
  24557: 9e0d7b6
  24555: f0639ec
  24551: a36f816
  24543: e7ac259
v: v3
  • Loading branch information
Oleg Nesterov authored and Linus Torvalds committed Mar 29, 2006
1 parent 2966c76 commit dfa9166
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7001510d0cbf51ad202dd2d0744f54104285cbb9
refs/heads/master: 6b3934ef52712ece50605dfc72e55d00c580831a
2 changes: 1 addition & 1 deletion trunk/include/linux/sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -1149,7 +1149,7 @@ extern void flush_thread(void);
extern void exit_thread(void);

extern void exit_files(struct task_struct *);
extern void exit_signal(struct task_struct *);
extern void __cleanup_signal(struct signal_struct *);
extern void __exit_signal(struct task_struct *);
extern void __exit_sighand(struct task_struct *);
extern void exit_itimers(struct signal_struct *);
Expand Down
1 change: 0 additions & 1 deletion trunk/include/linux/slab.h
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,6 @@ extern kmem_cache_t *names_cachep;
extern kmem_cache_t *files_cachep;
extern kmem_cache_t *filp_cachep;
extern kmem_cache_t *fs_cachep;
extern kmem_cache_t *signal_cachep;
extern kmem_cache_t *sighand_cachep;
extern kmem_cache_t *bio_cachep;

Expand Down
23 changes: 19 additions & 4 deletions trunk/kernel/fork.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ static kmem_cache_t *task_struct_cachep;
#endif

/* SLAB cache for signal_struct structures (tsk->signal) */
kmem_cache_t *signal_cachep;
static kmem_cache_t *signal_cachep;

/* SLAB cache for sighand_struct structures (tsk->sighand) */
kmem_cache_t *sighand_cachep;
Expand Down Expand Up @@ -872,6 +872,22 @@ static inline int copy_signal(unsigned long clone_flags, struct task_struct * ts
return 0;
}

void __cleanup_signal(struct signal_struct *sig)
{
exit_thread_group_keys(sig);
kmem_cache_free(signal_cachep, sig);
}

static inline void cleanup_signal(struct task_struct *tsk)
{
struct signal_struct *sig = tsk->signal;

atomic_dec(&sig->live);

if (atomic_dec_and_test(&sig->count))
__cleanup_signal(sig);
}

static inline void copy_flags(unsigned long clone_flags, struct task_struct *p)
{
unsigned long new_flags = p->flags;
Expand Down Expand Up @@ -1206,10 +1222,9 @@ static task_t *copy_process(unsigned long clone_flags,
if (p->mm)
mmput(p->mm);
bad_fork_cleanup_signal:
exit_signal(p);
cleanup_signal(p);
bad_fork_cleanup_sighand:
if (p->sighand)
__exit_sighand(p);
__exit_sighand(p);
bad_fork_cleanup_fs:
exit_fs(p); /* blocking */
bad_fork_cleanup_files:
Expand Down
15 changes: 1 addition & 14 deletions trunk/kernel/signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -395,23 +395,10 @@ void __exit_signal(struct task_struct *tsk)
clear_tsk_thread_flag(tsk,TIF_SIGPENDING);
flush_sigqueue(&tsk->pending);
if (sig) {
/*
* We are cleaning up the signal_struct here.
*/
exit_thread_group_keys(sig);
kmem_cache_free(signal_cachep, sig);
__cleanup_signal(sig);
}
}

void exit_signal(struct task_struct *tsk)
{
atomic_dec(&tsk->signal->live);

write_lock_irq(&tasklist_lock);
__exit_signal(tsk);
write_unlock_irq(&tasklist_lock);
}

/*
* Flush all handlers for a task.
*/
Expand Down

0 comments on commit dfa9166

Please sign in to comment.