Ok, so I've found that using the -V0 RTS flag to turn off the RTS clock
(and associated signals) makes the code run fine with -threaded. I'm still
digging through the implications of that, though. Has some behavior here
changed in 7.4.1?

Mike Craig



On Tue, Feb 14, 2012 at 3:54 PM, Michael Craig <mks...@gmail.com> wrote:

> Hi all,
>
> I'm debugging an issue with multithreading and FFI calls in 7.4.1. The
> code in question is the zeromq3-haskell library, which provides an FFI
> binding to ZeroMQ.
>
> A little background: ZeroMQ gives the programmer "contexts" and "sockets".
> Contexts are thread-safe and generally used one-per-process, but sockets
> and not thread-safe so they're generally used one-per-thread.
>
> Have a look at the code in this gist: https://gist.github.com/1829190It's 
> just a server that prints requests and replies with "Hello", and a
> client that sends the requests ["1", "2", ..., "10"] and prints the
> responses.
>
> Despite the fact that ZMQ sockets are not thread-safe, it was possible to
> compile and run this code with -threaded under 7.0.4. Using MVars or some
> other locking mechanism, it was even possible to use the same socket from
> multiple parallel threads. (As long as the socket was not actually used in
> parallel by multiple threads, all was well.) In 7.4.1, the code will only
> run if compiled without -threaded. With -threaded, it croaks with an
> "operation on non-socket" error, which generally refers to a socket that's
> either been closed or
>
> I've dug through the code in zeromq3-haskell and haven't found anything
> suspicious looking. Before I go digging into libzmq itself, can somebody
> assure me that nothing has changed in 7.4.1 with regard to -threaded or the
> FFI that might cause this breakage?
>
> Cheers,
> Mike Craig
>
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to