[Haskell-cafe] Re: errno handling in concurrent haskell

Manlio Perillo manlio_perillo at libero.it
Tue Jan 13 09:28:28 EST 2009


Simon Marlow ha scritto:
> Manlio Perillo wrote:
> 
>> I have some doubts about errno handling in a Concurrent Haskell program.
>>
>> Let's suppose that GHC non threaded runtime is used, so that each 
>> Haskell thread is bound to an OS thread.
>>
>> Let's suppose there are two threads running (`A` and `B`).
>> Thread `A` calls a function `f`, that, in turn, calls via FFI a C 
>> function `c_f`.
>>
>> Function `c_f` fails, settings errno; however the GHC scheduler 
>> suspends execution of thread `A` and switch to thread `B`, before the 
>> current value of errno is read.
>>
>> Now, let's suppose thread `B` calls a function `g`, that, in turn, 
>> calls via FFI a C function `c_g`.
>> Function `c_g`, too, fails, setting errno.
>>
>>
>> Is this possible?
> 
> It's safe, we save the value of errno when a Haskell thread is 
> descheduled, and restore it when it is scheduled again.  We do the same 
> on Windows for GetLastError().
> 

Thanks.

I was just replying to the message, after having read the code of the 
scheduler.



Manlio Perillo


More information about the Haskell-Cafe mailing list