#define remove_parent(p)       list_del_init(&(p)->sibling)
 #define add_parent(p)          list_add_tail(&(p)->sibling,&(p)->parent->children)
 
-#define REMOVE_LINKS(p) do {                                   \
-       if (thread_group_leader(p))                             \
-               list_del_init(&(p)->tasks);                     \
-       remove_parent(p);                                       \
-       } while (0)
-
-#define SET_LINKS(p) do {                                      \
-       if (thread_group_leader(p))                             \
-               list_add_tail(&(p)->tasks,&init_task.tasks);    \
-       add_parent(p);                                          \
-       } while (0)
-
 #define next_task(p)   list_entry((p)->tasks.next, struct task_struct, tasks)
 #define prev_task(p)   list_entry((p)->tasks.prev, struct task_struct, tasks)
 
 
        if (thread_group_leader(p)) {
                detach_pid(p, PIDTYPE_PGID);
                detach_pid(p, PIDTYPE_SID);
+
+               list_del_init(&p->tasks);
                if (p->pid)
                        __get_cpu_var(process_counts)--;
        }
 
-       REMOVE_LINKS(p);
+       remove_parent(p);
 }
 
 void release_task(struct task_struct * p)
 
         */
        p->ioprio = current->ioprio;
 
-       SET_LINKS(p);
+       add_parent(p);
        if (unlikely(p->ptrace & PT_PTRACED))
                __ptrace_link(p, current->parent);
 
                p->signal->session = current->signal->session;
                attach_pid(p, PIDTYPE_PGID, process_group(p));
                attach_pid(p, PIDTYPE_SID, p->signal->session);
+
+               list_add_tail(&p->tasks, &init_task.tasks);
                if (p->pid)
                        __get_cpu_var(process_counts)++;
        }