arne / arnebrasseur.net wrote: > Mutant will often generate "broken" code, that's how it works, so > endless recursion could be the result. It needs to be able to detect > somehow that things go wrong. A segfault is actually not the biggest > problem. Mutant forks off workers, so if the worker dies it can assume > something went wrong. Sometimes the code in this ticket also causes > Ruby to get stuck in a futex. In that case the worker is "stuck" and > Mutant becomes unusable. The freezing is likely caused by the stack overflow corrupting memory used by a mutex, putting the mutex in an unrecoverable state. You're better off to detecting lockups in the parent process via periodic checks. > > We may increase the size of the guard area; but that costs memory. > > Right now, on (most) Linux systems, this guard costs 4K (one page) > > per-thread. > > Could you tell me where in the code I can see this? I would love to > investigate this more. Thanks! On GNU/Linux systems, this is done by glibc upon thread creation. We only set the stack size via pthread_attr_setstacksize in thread_pthread.c, but we could also call pthread_attr_setguardsize in the same place.