Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 64250
b: refs/heads/master
c: f9ee228
h: refs/heads/master
v: v3
  • Loading branch information
Oleg Nesterov authored and Linus Torvalds committed Aug 23, 2007
1 parent df63070 commit 10ab12b
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 12 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: 834d216e1f804560bd1421c511ad168d7c24b01d
refs/heads/master: f9ee228bdc82cff8ea1ec00fd952890e00679dd8
9 changes: 2 additions & 7 deletions trunk/fs/exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -779,19 +779,13 @@ static int de_thread(struct task_struct *tsk)
struct task_struct *leader = NULL;
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 (atomic_read(&oldsighand->count) <= 1) {
BUG_ON(atomic_read(&sig->count) != 1);
signalfd_detach(tsk);
exit_itimers(sig);
return 0;
}
Expand Down Expand Up @@ -930,6 +924,7 @@ static int de_thread(struct task_struct *tsk)
sig->flags = 0;

no_thread_group:
signalfd_detach(tsk);
exit_itimers(sig);
if (leader)
release_task(leader);
Expand Down
14 changes: 10 additions & 4 deletions trunk/fs/signalfd.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,18 @@ static int signalfd_lock(struct signalfd_ctx *ctx, struct signalfd_lockctx *lk)
sighand = lock_task_sighand(lk->tsk, &lk->flags);
rcu_read_unlock();

if (sighand && !ctx->tsk) {
if (!sighand)
return 0;

if (!ctx->tsk) {
unlock_task_sighand(lk->tsk, &lk->flags);
sighand = NULL;
return 0;
}

return sighand != NULL;
if (lk->tsk->tgid == current->tgid)
lk->tsk = current;

return 1;
}

static void signalfd_unlock(struct signalfd_lockctx *lk)
Expand Down Expand Up @@ -331,7 +337,7 @@ asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, size_t sizemas

init_waitqueue_head(&ctx->wqh);
ctx->sigmask = sigmask;
ctx->tsk = current;
ctx->tsk = current->group_leader;

sighand = current->sighand;
/*
Expand Down

0 comments on commit 10ab12b

Please sign in to comment.