[MLton] Problem with the setitimer() emulation for MinGW

Wesley W. Terpstra wesley at terpstra.ca
Sun Aug 30 15:39:02 PDT 2009


On Thu, Aug 27, 2009 at 5:06 PM, Nicolas Bertolotti <
Nicolas.Bertolotti at mathworks.fr> wrote:

> I am facing strange crashes of the MinGW version of my application when
> using the TimeLimit structure
>

What is the "TimeLimit" structure? MLton exposes access to this
functionality only via the MLton.Itimer structure.


> which relies on the setitimer implementation (MLton compiler based on the
> current SVN sources).
>

Can you provide a small demonstration program? Which version of Windows?

> When I run a function using TimeLimit, the process actually crashes about
> 10 seconds after the timer is initialized before the TimeLimit call
> completes (even if the function I run through TimeLimit requires much less
> than 10 seconds to complete).
>
Is 10 seconds a special value in your program?

> I noticed that the issue disappears if I comment out the
> SetThreadPriority() call in the fixPriority() function (file
> runtime/platform/mingw.c) and call :
>
> SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);
>
> instead from the main thread.
>
Well, removing the line completely will just decrease the responsiveness of
the timers. Setting the main thread to higher priority will decrease
responsiveness even further.

Is it possible that this decreased responsiveness masks some phenomenon in
your program which relates to this awfully special sounding 10s? A race
condition perhaps?

> I can’t find out a reason why the system would let us change the priority
> of the timer thread (the function returns TRUE) but adopt a strange behavior
> after than but it definitely seems to be the case.
>
I'm unconvinced that Windows would have a bug like this.

I get the vague impression that you might be using the MLton implementation
of setitimer directly... If that is the case, it probably is also the source
of your problems. The "signal handler" run by setitimer does not run in the
main thread, greatly restricting what one can safely do. MLton itself only
uses the handle to set a flag. I suggest you do the same.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mlton.org/pipermail/mlton/attachments/20090831/a2b2c2c7/attachment.htm


More information about the MLton mailing list