Date: Tue, 27 Feb 2001 07:43:49 -0500 (EST) From: Peter Dufault <dufault@hda.hda.com> To: Marc W <mwlist@lanfear.com> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: Where can I find out rules on blocking in threads? Message-ID: <200102271245.f1RCj5T21997@hda.hda.com> In-Reply-To: <200102270121.RAA39980@akira.lanfear.com> from Marc W at "Feb 26, 2001 05:21:37 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
> 1. initializes some UI goo (but doesn't start any of it UP) using a > GUI framework (Qt) > 2. creates a FIFO, and then spawns a thread > 3. this new thread then does: > > fifo = open(fifoPath, O_RDONLY); ... > > Now, the problem is that when step 3 above blocks on the open(2) > call (as it should, since the other end of the pipe isn't opened yet), > the whole application is frozen, and the main thread can't continue > with GUI processing, and the app appears to die. > > What is goofy is that this works just fine under Linux. So, > FreeBSD has slightly different blocking rules or something -- but I > don't understand them. It also hangs under Solaris 8/Intel. > > So, the question is: how can I find out what these differences are > and try to get around them. I'm using this to limit instances of my > program to one, and need a named pipe instead of just a lock file so > that new instances can communicate any arguments they might have been > given, etc ... I think the FreeBSD behavior is wrong, the spec says that when opening a FIFO with O_NONBLOCK clear that: > An open() for reading-only shall block the calling thread until a > thread opens the file for writing. An open() for writing-only > shall block the calling thread until a thread opens the file for > reading. The FBSD man pages will let you know if something will block or not, for example, look at the "implementation notes" section for open. You can open the fifo non-blocking and then clear O_NONBLOCK using fcntl, hopefully that will work in all environments. Peter -- Peter Dufault (dufault@hda.com) Realtime development, Machine control, HD Associates, Inc. Fail-Safe systems, Agency approval 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?200102271245.f1RCj5T21997>