This is on Debian unstable (the soon-to-be-released Stretch should be close enough), but also amd64 in VirtualBox. Perhaps there have been some glibc changes? I couldn't reproduce it under my macOS host, which would be consistent with that.
James > On 1 Mar 2017, at 15:48, David Matthews <david.matth...@prolingua.co.uk> > wrote: > > Hi James, > I've tried this with Debian stable 64-bit in a VirtualBox and haven't had any > problems. Of course that's a different set-up but I would have expected to > see something if there was a problem. It makes it rather difficult to track > this down. > > David > > On 23/02/2017 20:44, James Clarke wrote: >> Hi David, >> It seems Test166 (the new condition variable one) sometimes deadlocks. I'm >> able to reliably reproduce with the following: >> >>> ./configure >>> make -j2 compiler >>> make -j2 compiler >>> while true; do make -j2 check; done >> >> (The -j2's are probably irrelevant, but I'm including them for completeness) >> >> On the 40th iteration of the loop it got stuck for me: >> >>> val runTests = fn: string -> bool >>> Test028.ML => Passed >>> Test166.ML => >> >> Threads: >> >>> Thread 9 (Thread 0x7faf066fc700 (LWP 29448)): >>> #0 pthread_cond_wait@@GLIBC_2.3.2 () at >>> ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185 >>> #1 0x000055ff143b7e30 in Processes::WaitInfinite(TaskData*, SaveVecEntry*) >>> () >>> #2 0x000055ff143b7f4f in PolyThreadCondVarWait () >>> #3 0x000055ff1426496d in area1 () >>> #4 0x00007faf0ce71c00 in ?? () >>> #5 0x00007faf066fbe08 in ?? () >>> #6 0x00007faf0fb79040 in ?? () from /lib64/ld-linux-x86-64.so.2 >>> #7 0x00007faf0e6f0e48 in __GI___libc_malloc (bytes=140389730295024) at >>> malloc.c:2925 >>> #8 0x000055ff143c5477 in initThreadSignals(TaskData*) () >>> #9 0x000055ff143b8990 in NewThreadFunction(void*) () >>> #10 0x00007faf0f73f424 in start_thread (arg=0x7faf066fc700) at >>> pthread_create.c:333 >>> #11 0x00007faf0e75e9bf in clone () at >>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:105 >>> >>> Thread 8 (Thread 0x7faf06efd700 (LWP 29447)): >>> #0 pthread_cond_wait@@GLIBC_2.3.2 () at >>> ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185 >>> #1 0x000055ff143b7e30 in Processes::WaitInfinite(TaskData*, SaveVecEntry*) >>> () >>> #2 0x000055ff143b7f4f in PolyThreadCondVarWait () >>> #3 0x000055ff1426496d in area1 () >>> #4 0x00007faf0ce71c00 in ?? () >>> #5 0x00007faf06efce08 in ?? () >>> #6 0x00007faf0fb79040 in ?? () from /lib64/ld-linux-x86-64.so.2 >>> #7 0x00007faf0e6f0e48 in __GI___libc_malloc (bytes=140389730294192) at >>> malloc.c:2925 >>> #8 0x000055ff143c5477 in initThreadSignals(TaskData*) () >>> #9 0x000055ff143b8990 in NewThreadFunction(void*) () >>> #10 0x00007faf0f73f424 in start_thread (arg=0x7faf06efd700) at >>> pthread_create.c:333 >>> #11 0x00007faf0e75e9bf in clone () at >>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:105 >>> >>> Thread 7 (Thread 0x7faf076fe700 (LWP 29446)): >>> #0 pthread_cond_wait@@GLIBC_2.3.2 () at >>> ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185 >>> #1 0x000055ff143b7e30 in Processes::WaitInfinite(TaskData*, SaveVecEntry*) >>> () >>> #2 0x000055ff143b7f4f in PolyThreadCondVarWait () >>> #3 0x000055ff1426496d in area1 () >>> #4 0x00007faf0ce71c00 in ?? () >>> #5 0x00007faf076fde08 in ?? () >>> #6 0x00007faf0fb79040 in ?? () from /lib64/ld-linux-x86-64.so.2 >>> #7 0x00007faf0e6f0e48 in __GI___libc_malloc (bytes=140389730242944) at >>> malloc.c:2925 >>> #8 0x000055ff143c5477 in initThreadSignals(TaskData*) () >>> #9 0x000055ff143b8990 in NewThreadFunction(void*) () >>> #10 0x00007faf0f73f424 in start_thread (arg=0x7faf076fe700) at >>> pthread_create.c:333 >>> #11 0x00007faf0e75e9bf in clone () at >>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:105 >>> >>> Thread 6 (Thread 0x7faf07fff700 (LWP 29445)): >>> #0 pthread_cond_wait@@GLIBC_2.3.2 () at >>> ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185 >>> #1 0x000055ff143b7237 in Processes::WaitForSignal(TaskData*, PLock*) () >>> #2 0x000055ff143c4f8f in PolyWaitForSignal () >>> #3 0x000055ff13f1b8ba in area1 () >>> #4 0x00007faf0ce71c00 in ?? () >>> #5 0x00007faf07ffee08 in ?? () >>> #6 0x00007faf0fb79040 in ?? () from /lib64/ld-linux-x86-64.so.2 >>> #7 0x00007faf0e6f0e48 in __GI___libc_malloc (bytes=140389730232720) at >>> malloc.c:2925 >>> #8 0x000055ff143c5477 in initThreadSignals(TaskData*) () >>> #9 0x000055ff143b8990 in NewThreadFunction(void*) () >>> #10 0x00007faf0f73f424 in start_thread (arg=0x7faf07fff700) at >>> pthread_create.c:333 >>> #11 0x00007faf0e75e9bf in clone () at >>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:105 >>> >>> Thread 5 (Thread 0x7faf0ce72700 (LWP 29444)): >>> #0 pthread_cond_wait@@GLIBC_2.3.2 () at >>> ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185 >>> #1 0x000055ff143b7e30 in Processes::WaitInfinite(TaskData*, SaveVecEntry*) >>> () >>> #2 0x000055ff143b7f4f in PolyThreadCondVarWait () >>> #3 0x000055ff1426496d in area1 () >>> #4 0x000055ff14b34e00 in gHeapSizeParameters () >>> #5 0x00007faf0ce71e08 in ?? () >>> #6 0x00007faf0fb64000 in ?? () >>> #7 0x000055ff143a7988 in MemMgr::GrowOrShrinkStack(TaskData*, unsigned >>> long) () >>> #8 0x000055ff15c76870 in ?? () >>> #9 0x000055ff15c76870 in ?? () >>> #10 0x000055ff15c76660 in ?? () >>> #11 0x000055ff15c76668 in ?? () >>> #12 0x000055ff143c9681 in X86TaskData::EnterPolyCode() () >>> #13 0x000055ff143b8990 in NewThreadFunction(void*) () >>> #14 0x00007faf0f73f424 in start_thread (arg=0x7faf0ce72700) at >>> pthread_create.c:333 >>> #15 0x00007faf0e75e9bf in clone () at >>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:105 >>> >>> Thread 4 (Thread 0x7faf0d673700 (LWP 29443)): >>> #0 0x00007faf0f747536 in futex_abstimed_wait_cancelable (private=0, >>> abstime=0x0, expected=0, futex_word=0x55ff14b34b40 <gTaskFarm>) at >>> ../sysdeps/unix/sysv/linux/futex-internal.h:205 >>> #1 do_futex_wait (sem=sem@entry=0x55ff14b34b40 <gTaskFarm>, abstime=0x0) >>> at sem_waitcommon.c:111 >>> #2 0x00007faf0f7475e4 in __new_sem_wait_slow (sem=0x55ff14b34b40 >>> <gTaskFarm>, abstime=0x0) at sem_waitcommon.c:181 >>> #3 0x000055ff143a61a3 in PSemaphore::Wait() () >>> #4 0x000055ff143a313d in GCTaskFarm::ThreadFunction() () >>> #5 0x000055ff143a3229 in GCTaskFarm::WorkerThreadFunction(void*) () >>> #6 0x00007faf0f73f424 in start_thread (arg=0x7faf0d673700) at >>> pthread_create.c:333 >>> #7 0x00007faf0e75e9bf in clone () at >>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:105 >>> >>> Thread 3 (Thread 0x7faf0de74700 (LWP 29442)): >>> #0 0x00007faf0f747536 in futex_abstimed_wait_cancelable (private=0, >>> abstime=0x0, expected=0, futex_word=0x55ff14b34b40 <gTaskFarm>) at >>> ../sysdeps/unix/sysv/linux/futex-internal.h:205 >>> #1 do_futex_wait (sem=sem@entry=0x55ff14b34b40 <gTaskFarm>, abstime=0x0) >>> at sem_waitcommon.c:111 >>> #2 0x00007faf0f7475e4 in __new_sem_wait_slow (sem=0x55ff14b34b40 >>> <gTaskFarm>, abstime=0x0) at sem_waitcommon.c:181 >>> #3 0x000055ff143a61a3 in PSemaphore::Wait() () >>> #4 0x000055ff143a313d in GCTaskFarm::ThreadFunction() () >>> #5 0x000055ff143a3229 in GCTaskFarm::WorkerThreadFunction(void*) () >>> #6 0x00007faf0f73f424 in start_thread (arg=0x7faf0de74700) at >>> pthread_create.c:333 >>> #7 0x00007faf0e75e9bf in clone () at >>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:105 >>> >>> Thread 2 (Thread 0x7faf0e675700 (LWP 29441)): >>> #0 0x00007faf0f747536 in futex_abstimed_wait_cancelable (private=0, >>> abstime=0x0, expected=0, futex_word=0x55ff14b35fc0 >>> <SigHandler::Init()::waitSemaphore>) at >>> ../sysdeps/unix/sysv/linux/futex-internal.h:205 >>> #1 do_futex_wait (sem=sem@entry=0x55ff14b35fc0 >>> <SigHandler::Init()::waitSemaphore>, abstime=0x0) at sem_waitcommon.c:111 >>> #2 0x00007faf0f7475e4 in __new_sem_wait_slow (sem=0x55ff14b35fc0 >>> <SigHandler::Init()::waitSemaphore>, abstime=0x0) at sem_waitcommon.c:181 >>> #3 0x000055ff143a61a3 in PSemaphore::Wait() () >>> #4 0x000055ff143c4c91 in SignalDetectionThread(void*) () >>> #5 0x00007faf0f73f424 in start_thread (arg=0x7faf0e675700) at >>> pthread_create.c:333 >>> #6 0x00007faf0e75e9bf in clone () at >>> ../sysdeps/unix/sysv/linux/x86_64/clone.S:105 >>> >>> Thread 1 (Thread 0x7faf0fb49740 (LWP 29440)): >>> #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at >>> ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225 >>> #1 0x000055ff143a604e in PCondVar::WaitFor(PLock*, unsigned int) () >>> #2 0x000055ff143b8c9f in Processes::BeginRootThread(PolyObject*) () >>> #3 0x000055ff143aaf13 in polymain () >>> #4 0x00007faf0e6962b1 in __libc_start_main (main=0x55ff13f15dc0 <main>, >>> argc=1, argv=0x7ffe94073258, init=<optimized out>, fini=<optimized out>, >>> rtld_fini=<optimized out>, stack_end=0x7ffe94073248) at >>> ../csu/libc-start.c:291 >>> #5 0x000055ff13f1661a in _start () >> >> Any ideas? This is on Debian amd64 unstable, but I've seen it on non-x86 >> architectures too with the latest version. Interestingly I can't seem to >> reproduce it on macOS. >> >> Regards, >> James >> >>> On 21 Feb 2017, at 12:48, David Matthews <david.matth...@prolingua.co.uk> >>> wrote: >>> >>> The latest version, provisionally called 5.6.1, has had very little change >>> for several months. I'm not aware of any show-stoppers so I think it would >>> be a good time to make a release. Because there have been some major >>> changes I was planning to call it 5.7. This is the last chance to do any >>> last tests before the release. >>> >>> David >>> _______________________________________________ >>> polyml mailing list >>> polyml@inf.ed.ac.uk >>> http://lists.inf.ed.ac.uk/mailman/listinfo/polyml
signature.asc
Description: Message signed with OpenPGP
_______________________________________________ polyml mailing list polyml@inf.ed.ac.uk http://lists.inf.ed.ac.uk/mailman/listinfo/polyml