Closed Smilex closed 4 years ago
What is the version of libpthread in your Ubuntu ? Does it still crash if you run a version compiled on your Arch linux ?
CToy enables live coding, it recompiles when the source code is modified, that's what run in the thread. CToy_player just compiles at the beginning (no live coding).
The ubuntu version is 2.23, and yes it still crashes with the same backtrace, when compiled on Arch
I'm not sure but it's possible you may have to recompile libtcc.so too on Arch. It would be surprising if the bug is related to libpthead. Or the bug comes from the code running in the thread, or something related to libtcc and (maybe) the version of glibc used to compile libtcc.
If the version of glibc used to commile libtcc.so on ubuntu is more recent than glibc used in Arch linux it could cause a crash on certain conditions (except if you already recompiled libtcc).
Sorry about the delay. I compiled libtcc on this Arch laptop, and I still get the same issue with the same bt. However I do find the different versions of GLIBC mentioned in the following weird. Remember that ldd --version gives me 2.26, so these are 3 different versions where I would expect one.
[ian@arch MTCL]$ readelf -s CToy | grep pthread 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getspecific@GLIBC_2.2.5 (3) 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.3.2 (4) 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_timedlock@GLIBC_2.2.5 (3) 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setspecific@GLIBC_2.2.5 (3) 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.3.2 (4) 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.2.5 (3) 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_timedwait@GLIBC_2.3.2 (4) 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (3) 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.2.5 (3) 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.3.2 (4) 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_delete@GLIBC_2.2.5 (3) 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.2.5 (3) 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_join@GLIBC_2.2.5 (3) 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_trylock@GLIBC_2.2.5 (3) 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_exit@GLIBC_2.2.5 (3) 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.2.5 (3) 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.3.2 (4) 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_detach@GLIBC_2.2.5 (3) 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (3) 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.2.5 (3) 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_create@GLIBC_2.2.5 (3) 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.2.5 (3) 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_broadcast@GLIBC_2.3.2 (4) 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (3) 350: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getspecific@@GLIB 365: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@@GLI 477: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_timedlock@@ 655: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setspecific@@GLIB 830: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@@GLIB 906: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy 1263: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_timedwait@@G 1389: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@@GLIBC 1769: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@@GLIBC_2.2 1793: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condinit@@GLIBC 1929: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_delete@@GLIBC 2152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@@GLIBC_2.2.5 2173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_join@@GLIBC_2.2.5 2204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_trylock@@GL 2326: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_exit@@GLIBC_2.2.5 2940: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype 3258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condwait@@GLIBC 3310: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_detach@@GLIBC_2.2 3827: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@@GLIBC 3886: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@@G 3914: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_create@@GLIBC 3959: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@@GL 4010: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_broadcast@@G 4087: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@@GLI
Ok, let's try to locate the bug more precisely. Try this two different things : A: Comment the code inside "ctoysrc_thread_init", does it still crash ? B: Comment the code inside "ctoyio_replace", does it still crash ?
I'm wondering if there is not a conflict between tinycthread.h and threads.h with the function name thrd_***. Check that everything is compiled in ANSI-C99 (no C11).
also getting this, the crash can be preventing by commenting any of:
140: thrd_join(ctoysrc_thread_id, NULL); 146: ctoysrc_thread_destroy(); 541: ctoy__src_thread_restart();
do you need to call ctoy__src_thread_restart(); in line 541?
(edit: the live reloading also didn't seem to be working, unless I was doing it wrong)
Are you also on Arch Linux ? What version of glibc is it bundled with ?
yep, 2.26
It may be caused by a glibc bug : https://sourceware.org/bugzilla/show_bug.cgi?id=20116
This wasn't an isssue on my machine with Ubuntu, but my laptop with Arch Linux. It's only relevant for the CToy executable. CToy_player does work, which makes sense because it doesn't compile with the thread stuff. What is the idea behind these two executables, CToy and CToy_player?
I upgraded my entire system, and I still get the error, meaning that this fails with libpthread version 2.25 and 2.26.