Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Feb 2001 15:15:33 +0000 (GMT)
From:      "E.B. Dreger" <eddy+public+spam@noc.everquick.net>
To:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: Where can I find out rules on blocking in threads?
Message-ID:  <Pine.LNX.4.20.0102271457560.15675-100000@www.everquick.net>
In-Reply-To: <200102270121.RAA39980@akira.lanfear.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Is this a library issue in libc_r?

I just wrote a quick test program using rfork(RFMEM|RFPROC) to
create a child thread.

I then had both the parent and the child attempt to open the pre-existing
file /tmp/blah with O_EXLOCK set.  When I specify O_NONBLOCK, the child
open() fails immediately.  When I do not specify O_NONBLOCK, the child
blocks indefinitely:

	#if TRY_NONBLOCKING
	# define O_XXXX (O_NONBLOCK)
	#else
	# define O_XXXX (0)
	#endif

	int main(int argc, char* *argv) {

		thread_creation_using_rfork(RFPROC|RFTHREAD) ;

		/* parent continues here */

		printf("main: %d\n", open("/tmp/blah",
			O_RDWR|O_EXLOCK|O_XXXX)) ;

		for( ; ; ) ;

	}

	void childthreadproc(void *) {

		/* child begins here */
		/* fails for O_NONBLOCK, otherwise blocks indefinitely */

		printf("child: %d\n", open("/tmp/blah",
			O_RDWR|O_EXLOCK|O_XXXX)) ;

		for( ; ; ) ;

	}

Note that I've omitted the guts of rfork().

Therefore, it seems to me that the blocking is at the library level, not
the kernel level.  Have I missed something?


Eddy

---------------------------------------------------------------------------

Brotsman & Dreger, Inc.
EverQuick Internet / EternalCommerce Division

E-Mail: eddy@everquick.net
Phone: (316) 794-8922

---------------------------------------------------------------------------


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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.4.20.0102271457560.15675-100000>