Spins when starting signal.org desktop app (Electron)
Thanks for this clever piece of software which has been useful for me (on Alpine Linux 3.15.4)
An application I still cannot run is the signal.org desktop client. It spins a single CPU thread in a tight loop. It seems to almost immediately get stuck in a tight loop shortly after startup and before any other threads are running.
I'm unsure why the total lack of any stack information in gdb. Linux "perf" gives a little more insight, showing the spin in some kind of malloc operation on thread start.
On the understanding it's an Electron app (based on Chrome) I tried Google's official Chrome download. On the surface, the behaviour is the same except: stack is shallower; and the name reported in perf is different (maybe Google compiled in a different malloc implementation)
There's really not a lot of information to go on here. Any suggestion on the next step for debugging/info? Thanks. Also has anyone tried other Electron apps? Because of course it could be the first of very many issues.
This is based on gcompat Git "current". I also tried merging all of the pending merge requests, with identical results.
$ cd signal-desktop-5.44.1
$ gdb --args ./signal-desktop
GNU gdb (GDB) 11.1
[...]
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./signal-desktop...
(No debugging symbols found in ./signal-desktop)
(gdb) run
Starting program: /opt/whisper/signal-desktop-5.44.1/signal-desktop
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
process 6472 is executing new program: /lib/ld-musl-x86_64.so.1
^C
Program received signal SIGINT, Interrupt.
0x00007ffff3ea7c63 in ?? ()
(gdb) thread apply all bt
Thread 1 (process 6472 "ld-musl-x86_64."):
#0 0x00007ffff3ea7c63 in ?? ()
#1 0x00007fffffffe400 in ?? ()
#2 0x00007ffff3eb2433 in ?? ()
#3 0x59e4d2c200000000 in ?? ()
#4 0x00007ffff7e8e180 in ?? ()
#5 0xfffffffe00000000 in ?? ()
#6 0x00007ffff7c7a710 in ?? ()
#7 0x00007ffff3eb1bb0 in ?? ()
#8 0x00007ffff3eb1a90 in ?? ()
#9 0x0000000000000028 in ?? ()
#10 0x0000000000000000 in ?? ()
(gdb)
$ LD_PRELOAD=/lib/libgcompat.so.0 ldd ./signal-desktop
/lib64/ld-linux-x86-64.so.2 (0x7fd7d2a11000)
/lib/libgcompat.so.0 => /lib/libgcompat.so.0 (0x7fd7c9b7b000)
libffmpeg.so => ./libffmpeg.so (0x7fd7c96a2000)
libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7fd7d2a11000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7fd7d2a11000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x7fd7c9655000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x7fd7c954a000)
libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x7fd7c939c000)
libnss3.so => /usr/lib/libnss3.so (0x7fd7c928d000)
libnssutil3.so => /usr/lib/libnssutil3.so (0x7fd7c925e000)
libsmime3.so => /usr/lib/libsmime3.so (0x7fd7c9238000)
libnspr4.so => /usr/lib/libnspr4.so (0x7fd7c91f5000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x7fd7c91cf000)
libatk-bridge-2.0.so.0 => /usr/lib/libatk-bridge-2.0.so.0 (0x7fd7c919b000)
libcups.so.2 => /usr/lib/libcups.so.2 (0x7fd7c9114000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x7fd7c90ca000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x7fd7c90b6000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x7fd7c908d000)
libgtk-3.so.0 => /usr/lib/libgtk-3.so.0 (0x7fd7c892b000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x7fd7c88e5000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0x7fd7c87f5000)
libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fd7d2a11000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x7fd7c86d3000)
libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0x7fd7c86ce000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x7fd7c86c9000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x7fd7c86b6000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x7fd7c86ae000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x7fd7c86a2000)
libgbm.so.1 => /usr/lib/libgbm.so.1 (0x7fd7c8692000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x7fd7c866d000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x7fd7c8646000)
libxkbcommon.so.0 => /usr/lib/libxkbcommon.so.0 (0x7fd7c8607000)
libasound.so.2 => /usr/lib/libasound.so.2 (0x7fd7c851c000)
libatspi.so.0 => /usr/lib/libatspi.so.0 (0x7fd7c84e5000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7fd7c84cb000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fd7d2a11000)
ld-linux-x86-64.so.2 => /lib/ld-linux-x86-64.so.2 (0x7fd7c84c4000)
libffi.so.8 => /usr/lib/libffi.so.8 (0x7fd7c84b7000)
libpcre.so.1 => /usr/lib/libpcre.so.1 (0x7fd7c845b000)
libintl.so.8 => /usr/lib/libintl.so.8 (0x7fd7c844e000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x7fd7c8449000)
libz.so.1 => /lib/libz.so.1 (0x7fd7c842f000)
libmount.so.1 => /lib/libmount.so.1 (0x7fd7c83dc000)
libplc4.so => /usr/lib/libplc4.so (0x7fd7c83d5000)
libplds4.so => /usr/lib/libplds4.so (0x7fd7c83d0000)
libavahi-common.so.3 => /usr/lib/libavahi-common.so.3 (0x7fd7c83c3000)
libavahi-client.so.3 => /usr/lib/libavahi-client.so.3 (0x7fd7c83b1000)
libgnutls.so.30 => /usr/lib/libgnutls.so.30 (0x7fd7c81e4000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x7fd7c81b3000)
libjpeg.so.8 => /usr/lib/libjpeg.so.8 (0x7fd7c812c000)
libgdk-3.so.0 => /usr/lib/libgdk-3.so.0 (0x7fd7c8040000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x7fd7c8030000)
libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x7fd7c7f87000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x7fd7c7f70000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x7fd7c7f33000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x7fd7c7e7a000)
libfribidi.so.0 => /usr/lib/libfribidi.so.0 (0x7fd7c7e5b000)
libcairo-gobject.so.2 => /usr/lib/libcairo-gobject.so.2 (0x7fd7c7e50000)
libepoxy.so.0 => /usr/lib/libepoxy.so.0 (0x7fd7c7d40000)
libXi.so.6 => /usr/lib/libXi.so.6 (0x7fd7c7d2f000)
libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x7fd7c7c99000)
libxcb-shm.so.0 => /usr/lib/libxcb-shm.so.0 (0x7fd7c7c94000)
libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0x7fd7c7c85000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x7fd7c7c79000)
libwayland-server.so.0 => /usr/lib/libwayland-server.so.0 (0x7fd7c7c64000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x7fd7c7c5f000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x7fd7c7c57000)
libblkid.so.1 => /lib/libblkid.so.1 (0x7fd7c7c0d000)
libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0x7fd7c7afe000)
libunistring.so.2 => /usr/lib/libunistring.so.2 (0x7fd7c7987000)
libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x7fd7c7974000)
libnettle.so.8 => /usr/lib/libnettle.so.8 (0x7fd7c792f000)
libhogweed.so.6 => /usr/lib/libhogweed.so.6 (0x7fd7c78e8000)
libgmp.so.10 => /usr/lib/libgmp.so.10 (0x7fd7c7881000)
libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x7fd7c7871000)
libwayland-cursor.so.0 => /usr/lib/libwayland-cursor.so.0 (0x7fd7c7868000)
libwayland-egl.so.1 => /usr/lib/libwayland-egl.so.1 (0x7fd7c7863000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x7fd7c7857000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x7fd7c7852000)
libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x7fd7c7832000)
libuuid.so.1 => /lib/libuuid.so.1 (0x7fd7c7829000)
libbz2.so.1 => /usr/lib/libbz2.so.1 (0x7fd7c781a000)
libbrotlidec.so.1 => /usr/lib/libbrotlidec.so.1 (0x7fd7c780c000)
libbsd.so.0 => /usr/lib/libbsd.so.0 (0x7fd7c77f9000)
libbrotlicommon.so.1 => /usr/lib/libbrotlicommon.so.1 (0x7fd7c77d6000)
libmd.so.0 => /usr/lib/libmd.so.0 (0x7fd7c77ca000)
$ perf record -gT -p 6629
$ perf report
#
# Total Lost Samples: 0
#
# Samples: 9K of event 'cycles'
# Event count (approx.): 7946235843
#
# Children Self Command Shared Object Symbol
# ........ ........ ............... ................... ......................................
#
100.00% 0.00% ld-musl-x86_64. [unknown] [k] 0xbde8c789480000cf
|
---0xbde8c789480000cf
pthread_atfork
malloc
malloc_size
100.00% 0.00% ld-musl-x86_64. ld-musl-x86_64.so.1 [.] pthread_atfork
|
---pthread_atfork
malloc
malloc_size
100.00% 0.00% ld-musl-x86_64. signal-desktop [.] malloc
|
---malloc
malloc_size
100.00% 100.00% ld-musl-x86_64. signal-desktop [.] malloc_size
|
--100.00%--0xbde8c789480000cf
pthread_atfork
malloc
malloc_size
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] native_write_msr
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] asm_sysvec_reschedule_ipi
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] irqentry_exit_to_user_mode
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] exit_to_user_mode_prepare
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] schedule
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] __schedule
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] finish_task_switch.isra.0
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] __perf_event_task_sched_in
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] __intel_pmu_enable_all.constprop.0
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] end_repeat_nmi
$ gdb --args ./chrome
GNU gdb (GDB) 11.1
[...]
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./chrome...
(No debugging symbols found in ./chrome)
(gdb) run
Starting program: /home/mark/tmp/ux/opt/google/chrome/chrome
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
process 6542 is executing new program: /lib/ld-musl-x86_64.so.1
^C
Program received signal SIGINT, Interrupt.
0x00007fffee925aaa in ?? ()
(gdb) bt
#0 0x00007fffee925aaa in ?? ()
#1 0x0000000000000000 in ?? ()
(gdb)
$ LD_PRELOAD=/lib/libgcompat.so.0 ldd ./chrome | less -S
/lib64/ld-linux-x86-64.so.2 (0x7fde5cef8000)
/lib/libgcompat.so.0 => /lib/libgcompat.so.0 (0x7fde5149d000)
libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7fde5cef8000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7fde5cef8000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x7fde51450000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x7fde51345000)
libnss3.so => /usr/lib/libnss3.so (0x7fde51236000)
libnssutil3.so => /usr/lib/libnssutil3.so (0x7fde51207000)
libsmime3.so => /usr/lib/libsmime3.so (0x7fde511e1000)
libnspr4.so => /usr/lib/libnspr4.so (0x7fde5119e000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x7fde51178000)
libatk-bridge-2.0.so.0 => /usr/lib/libatk-bridge-2.0.so.0 (0x7fde51144000)
libcups.so.2 => /usr/lib/libcups.so.2 (0x7fde510bd000)
libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x7fde50f0f000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x7fde50efb000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x7fde50eb1000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x7fde50e8c000)
libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fde5cef8000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x7fde50d6a000)
libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0x7fde50d65000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x7fde50d60000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x7fde50d4d000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x7fde50d45000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x7fde50d39000)
libgbm.so.1 => /usr/lib/libgbm.so.1 (0x7fde50d29000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x7fde50d02000)
libxkbcommon.so.0 => /usr/lib/libxkbcommon.so.0 (0x7fde50cc3000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x7fde50c7d000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0x7fde50b8d000)
libasound.so.2 => /usr/lib/libasound.so.2 (0x7fde50aa2000)
libatspi.so.0 => /usr/lib/libatspi.so.0 (0x7fde50a6b000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7fde50a51000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fde5cef8000)
ld-linux-x86-64.so.2 => /lib/ld-linux-x86-64.so.2 (0x7fde50a4a000)
libffi.so.8 => /usr/lib/libffi.so.8 (0x7fde50a3d000)
libpcre.so.1 => /usr/lib/libpcre.so.1 (0x7fde509e1000)
libintl.so.8 => /usr/lib/libintl.so.8 (0x7fde509d4000)
libplc4.so => /usr/lib/libplc4.so (0x7fde509cd000)
libplds4.so => /usr/lib/libplds4.so (0x7fde509c8000)
libavahi-common.so.3 => /usr/lib/libavahi-common.so.3 (0x7fde509bb000)
libavahi-client.so.3 => /usr/lib/libavahi-client.so.3 (0x7fde509a9000)
libgnutls.so.30 => /usr/lib/libgnutls.so.30 (0x7fde507dc000)
libz.so.1 => /lib/libz.so.1 (0x7fde507c2000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x7fde507bd000)
libmount.so.1 => /lib/libmount.so.1 (0x7fde5076a000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x7fde5075e000)
libwayland-server.so.0 => /usr/lib/libwayland-server.so.0 (0x7fde50749000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x7fde50744000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x7fde5073c000)
libfribidi.so.0 => /usr/lib/libfribidi.so.0 (0x7fde5071d000)
libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x7fde50674000)
libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x7fde505de000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x7fde505a1000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x7fde504e8000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x7fde504b7000)
libxcb-shm.so.0 => /usr/lib/libxcb-shm.so.0 (0x7fde504b2000)
libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0x7fde504a3000)
libXi.so.6 => /usr/lib/libXi.so.6 (0x7fde50492000)
libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0x7fde50383000)
libunistring.so.2 => /usr/lib/libunistring.so.2 (0x7fde5020d000)
libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x7fde501fa000)
libnettle.so.8 => /usr/lib/libnettle.so.8 (0x7fde501b5000)
libhogweed.so.6 => /usr/lib/libhogweed.so.6 (0x7fde5016e000)
libgmp.so.10 => /usr/lib/libgmp.so.10 (0x7fde50107000)
libblkid.so.1 => /lib/libblkid.so.1 (0x7fde500bd000)
libbsd.so.0 => /usr/lib/libbsd.so.0 (0x7fde500aa000)
libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x7fde5008a000)
libuuid.so.1 => /lib/libuuid.so.1 (0x7fde50081000)
libbz2.so.1 => /usr/lib/libbz2.so.1 (0x7fde50072000)
libbrotlidec.so.1 => /usr/lib/libbrotlidec.so.1 (0x7fde50065000)
libmd.so.0 => /usr/lib/libmd.so.0 (0x7fde50059000)
libbrotlicommon.so.1 => /usr/lib/libbrotlicommon.so.1 (0x7fde50036000)
$ perf record -gT -p 6629
$ perf report
#
# Total Lost Samples: 0
#
# Samples: 8K of event 'cycles'
# Event count (approx.): 7122767261
#
# Children Self Command Shared Object Symbol
# ........ ........ ............... ................... ......................................
#
100.00% 0.00% ld-musl-x86_64. ld-musl-x86_64.so.1 [.] pthread_atfork
|
---pthread_atfork
_ZnwmSt11align_val_tRKSt9nothrow_t
mallopt
100.00% 0.00% ld-musl-x86_64. chrome [.] _ZnwmSt11align_val_tRKSt9nothrow_t
|
---_ZnwmSt11align_val_tRKSt9nothrow_t
mallopt
100.00% 99.99% ld-musl-x86_64. chrome [.] mallopt
|
--99.99%--pthread_atfork
_ZnwmSt11align_val_tRKSt9nothrow_t
mallopt
0.01% 0.01% ld-musl-x86_64. [kernel.kallsyms] [k] do_sync_core
0.01% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] asm_sysvec_call_function
0.01% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] sysvec_call_function
0.01% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] __sysvec_call_function
0.01% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] flush_smp_call_function_queue
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] __perf_event_task_sched_in
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] asm_sysvec_reschedule_ipi
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] irqentry_exit_to_user_mode
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] exit_to_user_mode_prepare
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] schedule
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] __schedule
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] finish_task_switch.isra.0
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] native_write_msr
0.00% 0.00% ld-musl-x86_64. [kernel.kallsyms] [k] __intel_pmu_enable_all.constprop.0