Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Nov 1998 11:57:10 +0800
From:      Peter Wemm <peter@netplex.com.au>
To:        Brian Feldman <green@unixhelp.org>
Cc:        current@FreeBSD.ORG
Subject:   Re: RFSIGSHARE: forgot patch ;) 
Message-ID:  <199811050357.LAA03894@spinner.netplex.com.au>
In-Reply-To: Your message of "Wed, 04 Nov 1998 22:15:53 EST." <Pine.BSF.4.05.9811042214220.25785-100000@janus.syracuse.net> 

next in thread | previous in thread | raw e-mail | index | archive | help
Brian Feldman wrote:
[..]
> --- ./kern/kern_fork.c.orig	Wed Nov  4 20:33:11 1998
> +++ ./kern/kern_fork.c	Wed Nov  4 20:44:29 1998
> @@ -151,6 +151,10 @@
>  		    p1->p_pid);
>  		return (EOPNOTSUPP);
>  	}
> +	if (flags & RFSIGSHARE) {
> +		printf("shared signal space attemped: pid: %d\n",
> p1->p_pid);
> +		return (EOPNOTSUPP);
> +	}
>  #endif
>
>  	/*

RFSIGSHARE should work fine on SMP.

> @@ -320,6 +324,16 @@
>  	bcopy(p1->p_cred, p2->p_cred, sizeof(*p2->p_cred));
>  	p2->p_cred->p_refcnt = 1;
>  	crhold(p1->p_ucred);
> +
> +	if (flags & RFSIGSHARE) {
> +		p2->p_sig->p_refcnt++;
> +	} else {
> +		p2->p_sig = malloc(sizeof(struct procsig), M_TEMP,
> M_WAITOK);
> +		p2->p_sig->p_refcnt = 1;
> +		p2->p_sigmask = p1->p_sigmask;
> +		p2->p_sigignore = p1->p_sigignore;
> +		p2->p_sigcatch = p1->p_sigcatch;
> +	}
>  
>  	/* bump references to the text vnode (for procfs) */
>  	p2->p_textvp = p1->p_textvp;

Umm, you are sharing the signal masks, not the signal handler vectors 
themselves.  Think p_sigacts..  Those are stored after the PCB and are 
paged out.

Assuming you take a shot at sharing them, try this:  Keep p_sigacts there 
by default.  If a process attempts to share the signals during a fork, 
then malloc a copy and attach it to both the child and parent.  When the 
reference count drops to 1, the remaining process should probably have 
it's vectors copied to the upages again and the malloc space freed.  But 
good stuff so far! :-)

Cheers,
-Peter




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199811050357.LAA03894>