[M3devel] threading on Windows?
Mika Nystrom
mika at async.caltech.edu
Sat Feb 12 03:50:13 CET 2011
Another odd datapoint is that even rather aggressive testing seems not
to have any trouble on I386_DARWIN (same as AMD64_FREEBSD). With user
threads, of course.
So status right now of user threads seems to be:
FreeBSD4 : strange failure in libpthread as reported by gdb
LINUXLIBC6 : seg fault
AMD64_LINUX : seg fault
AMD64_FREEBSD : OK
I386_DARWIN : OK
I am never, ever 100% certain of my bootstrapping procedure so it's
possible I've done something wrong... however I'm using upgrade.py
and when I look for Thread\*.*o files I only see the ThreadPosix file
and not ThreadPThread. I'll try bootstrapping again :-)
Mika
Mika Nystrom writes:
>
>I forgot to add that I was running that program on the platform LINUXLIBC6.
>
>On FreeBSD4 I get the following bizarre behavior (program hangs):
>
>(gdb) run -tests tryexcept
>Starting program: /big/home/mika/cm3-writable/cm3/m3-libs/m3core/tests/thread/
>FreeBSD4/threadtest -tests tryexcept
>Writing file...done
>Creating tryexcept threads...done
>running...printing oldest/median age/newest
>.^C
>Program received signal SIGINT, Interrupt.
>[Switching to Thread 1 (LWP 100315)]
>0x681093f3 in pthread_testcancel () from /usr/lib/libpthread.so.1
>
>(gdb) where
>#0 0x681093f3 in pthread_testcancel () from /usr/lib/libpthread.so.1
>#1 0x680f917c in sigaction () from /usr/lib/libpthread.so.1
>#2 0x680f9d03 in sigaction () from /usr/lib/libpthread.so.1
>#3 0x680f850b in sigaction () from /usr/lib/libpthread.so.1
>#4 0x680f828c in sigaction () from /usr/lib/libpthread.so.1
>#5 0x6810192e in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
>#6 0x00000000 in ?? ()
>(gdb)
>
>Even though I am using ThreadPosix, not ThreadPthread...
>
>Also on AMD64_LINUX, the following:
>
>(gdb) run -tests tryexcept
>Starting program: /home/mika/cm3/cm3/m3-libs/m3core/tests/thread/AMD64_LINUX/t
>hreadtest -tests tryexcept
>[Thread debugging using libthread_db enabled]
>Writing file...done
>Creating tryexcept threads...done
>running...printing oldest/median age/newest
>.[New Thread 0x2b7877844620 (LWP 24086)]
>
>Program received signal SIGSEGV, Segmentation fault.
>[Switching to Thread 0x2b7877844620 (LWP 24086)]
>0x00007fff44dff5b1 in ?? ()
>(gdb) where
>#0 0x00007fff44dff5b1 in ?? ()
>#1 0x00007fff44dff6a5 in gettimeofday ()
>#2 0x00002b787589690a in gettimeofday () from /lib/libc.so.6
>#3 0x000000000045148f in TimePosix__Now ()
> at ../src/time/POSIX/TimePosixC.c:58
>#4 0x000000000045139e in Time__Now () at ../src/time/POSIX/TimePosix.m3:14
>#5 0x0000000000404da7 in Main__TApply (cl=Cannot access memory at address 0x2
>b7974014e68
>) at ../src/Main.m3:205
>#6 0x000000000044b3fb in ThreadPosix__RunThread ()
> at ../src/thread/POSIX/ThreadPosix.m3:993
>#7 0x00002b787584b7b0 in ?? () from /lib/libc.so.6
>#8 0x0000000000000000 in ?? ()
>(gdb)
>
>AMD64_FREEBSD seems to work, oddly enough, but slowly.
>
>I wonder if my compiler buidling has failed somehow (I am using the
>Python script following a recipe provided by Jay after modifying
>m3core/src/thread/m3makefile )
>
> Mika
>
>
>Mika Nystrom writes:
>>
>>Hello m3devel,
>>
>>I'm attempting to test the CVS head as of Jay's latest checkins with
>>the thread tester.
>>
>>I'm afraid there seems to be something wrong.
>>
>>I get a seg fault when running a few threads that do the following:
>>
>>PROCEDURE TApply(cl : Closure) : REFANY =
>> BEGIN
>> Thread.Pause(InitPause);
>> LOOP
>> TRY
>> WITH now = Time.Now() DO
>> times1[cl.id]:= FLOOR(now);
>> IF now < 0.0d0 THEN RAISE X END
>> END
>> EXCEPT X => <*ASSERT FALSE*>
>> END
>> END
>> END TApply;
>>
>>The crash is as follows:
>>
>>(gdb) run -tests tryexcept
>>Starting program: /home/mika/cm3-cvs/cm3/m3-libs/m3core/tests/thread/LINUXLIB
>C
>>6/threadtest -tests tryexcept
>>[Thread debugging using libthread_db enabled]
>>Writing file...done
>>Creating tryexcept threads...done
>>running...printing oldest/median age/newest
>>.
>>Program received signal SIGSEGV, Segmentation fault.
>>0x0808cc0f in TimePosix__Now () at ../src/time/POSIX/TimePosixC.c:53
>>53 {
>>(gdb) where
>>#0 0x0808cc0f in TimePosix__Now () at ../src/time/POSIX/TimePosixC.c:53
>>#1 0x0808cb57 in Time__Now () at ../src/time/POSIX/TimePosix.m3:14
>>#2 0x0804b875 in Main__TApply (cl=<error reading variable>)
>> at ../src/Main.m3:205
>>#3 0x08086c5e in ThreadPosix__RunThread ()
>> at ../src/thread/POSIX/ThreadPosix.m3:993
>>#4 0x400c343b in makecontext () from /lib/libc.so.6
>>#5 0x00000000 in ?? ()
>>(gdb)
>>
>>Note I am using user threads since pthreads are known to be buggy at the
>>moment.
>>
>>I would like to find one configuration (any configuration!!) that lets
>>me run a multithreaded program under AMD64_LINUX. I don't care what
>>version of the compiler it is, whether the threads are user or pthreads,
>>how many things I have to hack. Does anyone know what I need to do?
>>
>> Mika
More information about the M3devel
mailing list