Subject: Re: more siginfo q;s
To: Christos Zoulas <christos@zoulas.com>
From: enami tsugutomo <enami@but-b.or.jp>
List: tech-kern
Date: 09/14/2003 17:43:26
> +static void	ksiginfo_del(struct proc *p, ksiginfo_t *);

The p isn't necessary.

> +	if (
> +#ifdef notyet	/* XXX: QUEUING */
> +	    ksi->ksi_signo >= SIGRTMIN ||
> +#endif
> +	    (kpool = ksiginfo_get(p, ksi->ksi_signo)) == NULL) {
> +		if ((kpool = pool_get(&ksiginfo_pool, PR_NOWAIT)) == NULL)
> +			return;
> +		*kpool = *ksi;
> +		ksiginfo_put(p, kpool);
> +	} else
> +		*kpool = *ksi;

As the ksiginfo_get() returns an element with leaving it on the list,
I guess the assignment in the else-clause break the list.

> +        exithook_establish(ksiginfo_exithook, NULL);

Use tab to indent.

> +			kpsendsig(l, ksi, returnmask);
> +			ksiginfo_del(p, ksi);
> +			pool_put(&ksiginfo_pool, ksi);

Hmm, it looks like kpsendsig() may sleep but are you sure that bad
thing won't occur?  (I don't know since I just read this diff through
peephole).

> +	struct ksiginfo *ksi_next;
> +	struct ksiginfo *ksi_prev;

Why needs to be doublly linked?

enami.