On Sat, Dec 16, 2006 at 11:05:10PM +0300, Oleg Nesterov wrote:
>  static int kill_something_info(int sig, struct siginfo *info, int pid)
>  {
>       int ret;
> +
> +     rcu_read_lock();
> +     if (pid > 0) {
> +             ret = kill_pid_info(sig, info, find_pid(pid));
> +     } else if (pid == -1) {
> +             struct task_struct *p;
> +             int found = 0;
> +
> +             ret = 0;
> +             read_lock(&tasklist_lock);
> +             for_each_process(p)
> +                     if (!is_init(p) && p != current->group_leader) {
> +                             int err = group_send_sig_info(sig, info, p);
> +                             if (err != -EPERM)
> +                                     ret = err;
> +                             found = 1;
> +                     }
> +             read_unlock(&tasklist_lock);
> +             if (!found)
> +                     ret = -ESRCH;

This branch should probably be factored out into a helper of it's own:

static int kill_this_group_info(int sig, struct siginfo *info)
{
        struct task_struct *p;
        int ret = 0, found = 0;

        read_lock(&tasklist_lock);
        for_each_process(p) {
                if (!is_init(p) && p != current->group_leader) {
                        int err = group_send_sig_info(sig, info, p);
                        if (err != -EPERM)
                                ret = err;
                        found = 1;
                }
        }
        read_unlock(&tasklist_lock);
        if (!found)
                return -ESRCH;
        return found ? ret : -ESRCH;
}

> +     } else {
> +             struct pid *grp = task_pgrp(current);
> +             if (pid != 0)
> +                     grp = find_pid(-pid);
> +             ret = kill_pgrp_info(sig, info, grp);
> +     }

This also looks rather unreadable, an

        } else if (pid) {
                ret = kill_pgrp_info(sig, info, find_pid(-pid));
        } else {
                ret = kill_pgrp_info(sig, info, task_pgrp(current));
        }

might be slightly more code, but also a lot more readable.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to