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 [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to