[gambit-list] Threads blocking and IO

Marc Feeley feeley at iro.umontreal.ca
Tue Jan 29 23:47:13 EST 2008


On 29-Jan-08, at 3:27 PM, François Magnan wrote:

> Hello,
>
> I am experiencing a strange bug in my code that would be long to  
> explain. To resume the context, I have many threads running in  
> parallel, some open-process IO, some tcp-server IO and some termite  
> processes. At some point all the threads become blocked indefinitely  
> and the program sleeps forever.

Are these problems occurring on Mac OS X?  Could you describe what  
processes you start with open-process?  I'm asking because I recently  
fixed a bug in open-process.

> I stumbled on  the following paragraph in the threads section of the  
> Gambit doc:
>
> ``A thread is blocked if it is waiting for a mutex to become  
> unlocked, an I/O operation to become possible, the end of a “sleep”  
> period, etc. ''
>
>
> I think this may lead me to a solution to my bug but I don't clearly  
> understand the statement. Could there be an IO operation that blocks  
> all my threads?
> Any help would be greatly appreciated.

You have to beware of C functions that are called from the Scheme  
world.  If the C function performs an I/O operation, or a "sleep", or  
a "wait" on a process, or acquire a mutex, and the operation blocks  
then the Scheme thread scheduler will never get a chance to schedule  
another Scheme thread.  Some Scheme functions which rely on C library  
functions that can block, such as host-info, also have the same issue.

Marc




More information about the Gambit-list mailing list