git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
signal/timer/event: signalfd core
[safe/jmp/linux-2.6]
/
fs
/
exec.c
diff --git
a/fs/exec.c
b/fs/exec.c
index
2255dc7
..
955a8eb
100644
(file)
--- a/
fs/exec.c
+++ b/
fs/exec.c
@@
-50,6
+50,7
@@
#include <linux/tsacct_kern.h>
#include <linux/cn_proc.h>
#include <linux/audit.h>
#include <linux/tsacct_kern.h>
#include <linux/cn_proc.h>
#include <linux/audit.h>
+#include <linux/signalfd.h>
#include <asm/uaccess.h>
#include <asm/mmu_context.h>
#include <asm/uaccess.h>
#include <asm/mmu_context.h>
@@
-582,6
+583,13
@@
static int de_thread(struct task_struct *tsk)
int count;
/*
int count;
/*
+ * Tell all the sighand listeners that this sighand has
+ * been detached. The signalfd_detach() function grabs the
+ * sighand lock, if signal listeners are present on the sighand.
+ */
+ signalfd_detach(tsk);
+
+ /*
* If we don't share sighandlers, then we aren't sharing anything
* and we can just re-use it all.
*/
* If we don't share sighandlers, then we aren't sharing anything
* and we can just re-use it all.
*/
@@
-757,8
+765,7
@@
no_thread_group:
spin_unlock(&oldsighand->siglock);
write_unlock_irq(&tasklist_lock);
spin_unlock(&oldsighand->siglock);
write_unlock_irq(&tasklist_lock);
- if (atomic_dec_and_test(&oldsighand->count))
- kmem_cache_free(sighand_cachep, oldsighand);
+ __cleanup_sighand(oldsighand);
}
BUG_ON(!thread_group_leader(tsk));
}
BUG_ON(!thread_group_leader(tsk));