digitalmars.D - Can you reproduce this threading bug?
- FeepingCreature (13/13) Jun 14 2019 Consider the following code:
- ag0aep6g (2/19) Jun 14 2019 Can reproduce. DMD 2.086.0, Linux 5.0.0-16-generic x86_64
- Alex (3/16) Jun 14 2019 Can reproduce. DMD64 D Compiler v2.086.0, MacOs 10.13.6; Darwin
- FeepingCreature (3/3) Jun 14 2019 Happens for me at home too, with ldc2-1.11 on 4.14.111.
- Antonio Corbi (36/39) Jun 14 2019 Using Arch Linux:
- Jacob Carlborg (53/72) Jun 14 2019 On macOS I get a mixture of the following:
- rikki cattermole (4/23) Jun 14 2019 Cannot reproduce under Windows 10 dmd 2.082.0 and ldc2 1.12.0-beta2.
- FeepingCreature (4/4) Jun 16 2019 Filed as 19978! (Darn, I was hoping for 20000.)
Consider the following code: void main() { import core.thread : Thread; with (new Thread({ })) { isDaemon = true; start; } } On Linux, this builds and runs. Most of the time. Maybe 99% of the time. But if you run it in a loop: while true; do ./test || break; done You may see that it segfaults after a few seconds. At least, it does for me on 2.080.0, Linux 4.18.0-20 x86_64. This is obviously quite bad. Any ideas?
Jun 14 2019
On 14.06.19 18:36, FeepingCreature wrote:Consider the following code: void main() { import core.thread : Thread; with (new Thread({ })) { isDaemon = true; start; } } On Linux, this builds and runs. Most of the time. Maybe 99% of the time. But if you run it in a loop: while true; do ./test || break; done You may see that it segfaults after a few seconds. At least, it does for me on 2.080.0, Linux 4.18.0-20 x86_64.Can reproduce. DMD 2.086.0, Linux 5.0.0-16-generic x86_64
Jun 14 2019
On Friday, 14 June 2019 at 16:36:04 UTC, FeepingCreature wrote:Consider the following code: void main() { import core.thread : Thread; with (new Thread({ })) { isDaemon = true; start; } } On Linux, this builds and runs. Most of the time. Maybe 99% of the time. But if you run it in a loop: while true; do ./test || break; done You may see that it segfaults after a few seconds. At least, it does for me on 2.080.0, Linux 4.18.0-20 x86_64. This is obviously quite bad. Any ideas?Can reproduce. DMD64 D Compiler v2.086.0, MacOs 10.13.6; Darwin Kernel Version 17.7.0; x86_64
Jun 14 2019
Happens for me at home too, with ldc2-1.11 on 4.14.111. I think with the Mac user reporting in, we can exclude a kernel or glibc issue. Damn.
Jun 14 2019
On Friday, 14 June 2019 at 18:41:41 UTC, FeepingCreature wrote:Happens for me at home too, with ldc2-1.11 on 4.14.111. I think with the Mac user reporting in, we can exclude a kernel or glibc issue. Damn.Using Arch Linux: 16:19:25 UTC 2019 x86_64 GNU/Linux And dmd: dmd --version DMD64 D Compiler v2.086.0 Compiling with "dmd -g" and running the same loop but inside gdb (while true; do gdb -ex run -ex q ./ttest || break; done), this is the stack trace I get: [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". [New Thread 0x7ffff7b1c700 (LWP 16006)] Thread 2 "ttest" received signal SIGUSR1, User defined signal 1. [Switching to Thread 0x7ffff7b1c700 (LWP 16006)] 0x00007ffff7f6708a in __lll_unlock_wake () from /usr/lib/libpthread.so.0 A debugging session is active. Inferior 1 [process 15984] will be killed. Quit anyway? (y or n) n Not confirmed. (gdb) bt /usr/lib/libpthread.so.0 /usr/lib/libpthread.so.0 _D4core4sync5mutex5Mutex__T14unlock_nothrowTCQBrQBpQBnQBkZQBfMFNbNiNeZv () _D4core6thread6Thread3addFNbNiCQBdQBbQxbZv () /usr/lib/libpthread.so.0 Hope this helps. Antonio
Jun 14 2019
On 2019-06-14 18:36, FeepingCreature wrote:Consider the following code: void main() { import core.thread : Thread; with (new Thread({ })) { isDaemon = true; start; } } On Linux, this builds and runs. Most of the time. Maybe 99% of the time. But if you run it in a loop: while true; do ./test || break; done You may see that it segfaults after a few seconds. At least, it does for me on 2.080.0, Linux 4.18.0-20 x86_64. This is obviously quite bad. Any ideas?On macOS I get a mixture of the following: Aborting from src/core/sync/mutex.d(149) Error: pthread_mutex_destroy failed.Abort trap: 6 Aborting from src/core/sync/mutex.d(149) Error: pthread_mutex_destroy failed.Segmentation fault: 11 Aborting from Segmentation fault: 11 Pretty easy to reproduce. But when I tried in a debugger I failed to reproduce the segfault. Although, here is what the crash reporter logged: Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Application Specific Information: abort() called Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libsystem_kernel.dylib 0x00007fff4fe8cb66 __pthread_kill + 10 1 libsystem_pthread.dylib 0x00007fff50057080 pthread_kill + 333 2 libsystem_c.dylib 0x00007fff4fde81ae abort + 127 3 main 0x00000001033978e2 _D4core8internal5abortQgFNbNiNfMAyaMQemZv + 262 4 main 0x0000000103394e73 thread_term + 259 5 main 0x00000001033a7268 rt_term + 88 6 main 0x00000001033a796c _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZv + 208 7 main 0x00000001033a7848 _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv + 36 8 main 0x00000001033a77a8 _d_run_main + 764 9 main 0x0000000103384e72 main + 34 10 libdyld.dylib 0x00007fff4fd3c015 start + 1 Thread 1: 0 main 0x0000000103394ab3 _D4core6thread6Thread6removeFNbNiCQBgQBeQBaZv + 63 1 main 0x0000000103393922 thread_entryPoint + 526 2 libsystem_pthread.dylib 0x00007fff50054661 _pthread_body + 340 3 libsystem_pthread.dylib 0x00007fff5005450d _pthread_start + 377 4 libsystem_pthread.dylib 0x00007fff50053bf9 thread_start + 13 Thread 0 crashed with X86 Thread State (64-bit): rax: 0x0000000000000000 rbx: 0x00007fff88782380 rcx: 0x00007ffeec87b158 rdx: 0x0000000000000000 rdi: 0x0000000000000307 rsi: 0x0000000000000006 rbp: 0x00007ffeec87b190 rsp: 0x00007ffeec87b158 r8: 0x000000000000000a r9: 0x0000000000000011 r10: 0x0000000000000000 r11: 0x0000000000000206 r12: 0x0000000000000307 r13: 0x00007ffeec87b3c6 r14: 0x0000000000000006 r15: 0x000000000000002d rip: 0x00007fff4fe8cb66 rfl: 0x0000000000000206 cr2: 0x000000010343d088 Logical CPU: 6 Error Code: 0x00000004 Trap Number: 14 -- /Jacob Carlborg
Jun 14 2019
On 15/06/2019 4:36 AM, FeepingCreature wrote:Consider the following code: void main() { import core.thread : Thread; with (new Thread({ })) { isDaemon = true; start; } } On Linux, this builds and runs. Most of the time. Maybe 99% of the time. But if you run it in a loop: while true; do ./test || break; done You may see that it segfaults after a few seconds. At least, it does for me on 2.080.0, Linux 4.18.0-20 x86_64. This is obviously quite bad. Any ideas?Cannot reproduce under Windows 10 dmd 2.082.0 and ldc2 1.12.0-beta2. But this does not say much, Windows has a different set of costs related to threads + processes. It was a good second between runs.
Jun 14 2019
Filed as 19978! (Darn, I was hoping for 20000.) https://issues.dlang.org/show_bug.cgi?id=19978 Thanks everyone for the help in excluding kernel, backend and stdlib as source!
Jun 16 2019