Hi,
Thank you all for your answers. The process I start with open-process is a java application that uses it's standard input and standard output for interacting with java classes through reflection. It is some kind of bridge between the Gambit world and the Java world. The bug appears on both Windows (MIngW) and MacOSX (Leopard).
Can IO with external processes (through open-process) block all threads?
I will try to get the latest patches if it fixes the bug. I will also try wo put timeouts on all IO operations to isolate the faulty one.
I also have a (separate?) problem strictly on WinXP where the open-tcp- server implementation seems to miss some client connections when there are too much concurrent connections. I have a web services server implemented in Gambit and the client browers make some Ajax calls when the page initially loads. One of them is consistently never received by the server. When there is let load on the server, the same request is always received and answered properly.
I tested this with many different clients, some requests are just dropped by the server.
Could this be related to the WaitForMultipleObjects() that Jeff Read was mentioning in his answer to my post?
Thanks, Francois Magnan
On 29-Jan-08, at 11:47 PM, Marc Feeley wrote:
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