Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Oct 1995 14:02:57 -0700 (MST)
From:      Terry Lambert <terry@lambert.org>
To:        rminnich@Sarnoff.COM (Ron G. Minnich)
Cc:        deraadt@theos.com, hackers@FreeBSD.org
Subject:   Re: anatomy of rfork, part 2: fork code
Message-ID:  <199510252102.OAA19472@phaeton.artisoft.com>
In-Reply-To: <Pine.SUN.3.91.951025145433.28796A-100000@terra> from "Ron G. Minnich" at Oct 25, 95 03:02:53 pm

next in thread | previous in thread | raw e-mail | index | archive | help
> 	/* bump references to the text vnode (for procfs) */
> 	p2->p_textvp = p1->p_textvp;
> 	if (p2->p_textvp)
> 		VREF(p2->p_textvp);
> 
> 	/* BEGIN CHANGED CODE FOR RFORK FOR DUPFD () */
>        if (dupfd)
>                p2->p_fd = fdcopy(p1);
>        else
>                {
>                        /* make this a function at some point */
>                        /* danger!!! no locks!!! */
>                        p2->p_fd = p1->p_fd;
>                        p2->p_fd->fd_refcnt++;
>                }

One presumes exit(2) knows how to clean this up?

I implemented fd table sharing in UnixWare 2.0 using something similar
to the following in the user process:

	/*
	 * Set up proc so normal for will cause FD's to be
	 * inherited.
	 */

	/* get our name in procfs*/
	sprintf( pnamebuf, "/proc/%d", getpid());

	/* open ourselves*/
	if( ( procfd = open( pnamebuf, O_RDWR)) == -1) {
		perror( "open: context sharing");
		exit( 1);
	}

	/* unset the defualt "copy fd table on fork" flag*/
	if( ioctl( procfd, PFS_INHERITFDTAB, 1)) {
		perror( "ioctl: context sharing");
		exit( 1);
	}

	/* done*/
	close( procfd);

Which does the same thing without requiring the introduction of an
additional system call interface or fork abstraction.


					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.



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