Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Feb 2001 15:34:51 +0100
From:      mouss <usebsd@free.fr>
To:        Marc W <mwlist@lanfear.com>, freebsd-hackers@freebsd.org
Subject:   Re: Where can I find out rules on blocking in threads?
Message-ID:  <4.3.0.20010227153039.00dd4f00@pop.free.fr>
In-Reply-To: <200102270121.RAA39980@akira.lanfear.com>

next in thread | previous in thread | raw e-mail | index | archive | help
At 17:21 26/02/01 -0800, Marc W wrote:
>hello!
>
>     I'm running into a problem with some threading using pthreads in an
>application i'm writing for FreeBSD.
>
>     The application basically
>
>     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);
>
>     4. after the new thread is spawned, the application is supposed to
>then continue initialization, showing the main window and continuing on
>happily.
>
>
>     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 ...
>
>
>     any suggestions?

depens on how long it blocks? is it indefinitely blocking or for some time?
in the latter, you might use a sleep() in the child before the open().
Does the parent wait for its child (the thread that does the open fifo thing)?

can you provided a small piece of code that shows this behaviour?

cheers,
mouss


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?4.3.0.20010227153039.00dd4f00>