Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Dec 1998 21:33:45 +0000 (GMT)
From:      Terry Lambert <tlambert@primenet.com>
To:        info@highwind.com (HighWind Software Information)
Cc:        current@FreeBSD.ORG
Subject:   Re: Thread fd locking and fork()
Message-ID:  <199812042133.OAA06102@usr01.primenet.com>
In-Reply-To: <199812031522.KAA28193@highwind.com> from "HighWind Software Information" at Dec 3, 98 10:22:31 am

next in thread | previous in thread | raw e-mail | index | archive | help
> Here is the problem:
> 
> 1. You have a program that starts a few threads, one of these threads
> blocks in "accept()" waiting for a new connection on a file descriptor.
> 
> 2. In another thread, you want to start a child program. After the
> fork(), but before exec(), you close() all the file descriptors you
> don't want the child to touch.
> 
> 3. The child hangs in close() forever. 
> 
> Why?
> 
> At fork(), you get a copy of all the fd's. Problem is, many of them have
> their file descriptors locked.
> 
> ---
> 
> Is there any solution to this? Perhaps the fork() code should unlock
> all the descriptors.
> 
> Does this makes sense?
> 
> Opening a PR now.

% man fcntl

FCNTL(2)                  FreeBSD System Calls Manual                 FCNTL(2)

NAME
     fcntl - file control

[ ... ]

     F_SETFD    Set the close-on-exec flag associated with fd to the low order
                bit of arg (0 or 1 as above).


Then don't explicitly call close after the exec, since the fork()
wrapper in libc_r will Do The Right Thing(tm).

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

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?199812042133.OAA06102>