Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24-git15 /fs/exec.c

Filename:/fs/exec.c
Lines Added:6
Lines Deleted:10
Also changed in: (Previous) 2.6.24  2.6.24-rc8  2.6.24-rc7  2.6.24-rc6  2.6.24-rc5  2.6.24-rc4 
(Following) 2.6.24-git16  2.6.24-git17  2.6.24-git18  2.6.24-git19  2.6.24-git20  2.6.24-git21 

Location
[  2.6.24-git15
  [  fs
     o  exec.c

Patch

diff --git a/fs/exec.c b/fs/exec.c
index 282240a..be923e4 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -760,7 +760,7 @@ static int de_thread(struct task_struct *tsk)
     */
    read_lock(&tasklist_lock);
    spin_lock_irq(lock);
-   if (sig->flags & SIGNAL_GROUP_EXIT) {
+   if (signal_group_exit(sig)) {
       /*
        * Another group action in progress, just
        * return so that the signal is processed.
@@ -778,6 +778,7 @@ static int de_thread(struct task_struct *tsk)
    if (unlikely(tsk->group_leader == task_child_reaper(tsk)))
       task_active_pid_ns(tsk)->child_reaper = tsk;
 
+   sig->group_exit_task = tsk;
    zap_other_threads(tsk);
    read_unlock(&tasklist_lock);
 
@@ -802,7 +803,6 @@ static int de_thread(struct task_struct *tsk)
    }
 
    sig->notify_count = count;
-   sig->group_exit_task = tsk;
    while (atomic_read(&sig->count) > count) {
       __set_current_state(TASK_UNINTERRUPTIBLE);
       spin_unlock_irq(lock);
@@ -871,15 +871,10 @@ static int de_thread(struct task_struct *tsk)
       leader->exit_state = EXIT_DEAD;
 
       write_unlock_irq(&tasklist_lock);
-        }
+   }
 
    sig->group_exit_task = NULL;
    sig->notify_count = 0;
-   /*
-    * There may be one thread left which is just exiting,
-    * but it's safe to stop telling the group to kill themselves.
-    */
-   sig->flags = 0;
 
 no_thread_group:
    exit_itimers(sig);
@@ -947,12 +942,13 @@ static void flush_old_files(struct files_struct * files)
    spin_unlock(&files->file_lock);
 }
 
-void get_task_comm(char *buf, struct task_struct *tsk)
+char *get_task_comm(char *buf, struct task_struct *tsk)
 {
    /* buf must be at least sizeof(tsk->comm) in size */
    task_lock(tsk);
    strncpy(buf, tsk->comm, sizeof(tsk->comm));
    task_unlock(tsk);
+   return buf;
 }
 
 void set_task_comm(struct task_struct *tsk, char *buf)
@@ -1548,7 +1544,7 @@ static inline int zap_threads(struct task_struct *tsk, struct mm_struct *mm,
    int err = -EAGAIN;
 
    spin_lock_irq(&tsk->sighand->siglock);
-   if (!(tsk->signal->flags & SIGNAL_GROUP_EXIT)) {
+   if (!signal_group_exit(tsk->signal)) {
       tsk->signal->group_exit_code = exit_code;
       zap_process(tsk);
       err = 0;


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.