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

Attachment: signature.asc
Description: Message signed with OpenPGP

_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to