On Tue, Dec 10, 2002 at 08:41:34PM -0500, Miguel de Icaza wrote:
Hello,
With the help of Hans Boehm, I have been tracking the problems we
have to run the Windows.Forms code with GC enabled. Turns out that the problem is not the Boehm code at all, it just exposes a problem that might be happening elsewhere.
The problem is that by the time that Wine has been initialized,
using setjmp/longjmp will always lead to a crash. The code in pthreads that performs the longjmp will first try to invoke the pthread cleanup routines, and then invoke longjmp. This never happens.
In the particular case of Mono, I added a small bit of code before
calling into Boehm's GC, and then I run my app like this:
wine monostub.exe.so
The code snippet is:
jmp_buf buf;
printf ("Here\n"); if (setjmp (buf) == 0){ printf ("before\n"); longjmp (buf, 1); } else { printf ("after\n"); }
The code should display:
Here before after
But with Wine, I get a crash inside longjmp, after the "before" is
printed out. I get the Wine Console with the stack trace, but I can not copy/paste from it, so I have included a screenshot of it.
You currently cannot use the wine libraries together with -lpthread.
WINE already overwrites and reimplements several pthread_ functions which probably leads to internal confusion and the crash above.
Difficult to solve :/
Ciao, Marcus