[Pkg-lxde-maintainers] Bug#914150: Bug #914150: pcmanfm: SIGSEGV, Segmentation fault on opening folder
Bernhard Übelacker
bernhardu at mailbox.org
Tue Nov 20 12:52:54 GMT 2018
Dear Maintainer,
just tried to reproduce the crash and succeeded:
The backtrace looks like this with debug symbols installed:
(gdb) bt
#0 fm_file_info_get_path (fi=0x0) at base/fm-file-info.c:1028
#1 0x00007f4397419b7b in on_file_info_job_finished (job=0x558b83a39960, folder=0x558b83a2c230) at base/fm-folder.c:400
#2 0x00007f439720db6d in g_closure_invoke (closure=0x558b83a27170, return_value=0x0, n_param_values=1, param_values=0x7ffca2eca0f0, invocation_hint=0x7ffca2eca070) at ../../../../gobject/gclosure.c:810
#3 0x00007f43972208f3 in signal_emit_unlocked_R (node=node at entry=0x558b8380eb90, detail=detail at entry=0, instance=instance at entry=0x558b83a39960, emission_return=emission_return at entry=0x0, instance_and_params=instance_and_params at entry=0x7ffca2eca0f0) at ../../../../gobject/gsignal.c:3635
#4 0x00007f4397229882 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args at entry=0x7ffca2eca2a0) at ../../../../gobject/gsignal.c:3391
#5 0x00007f4397229ecf in g_signal_emit (instance=instance at entry=0x558b83a39960, signal_id=<optimized out>, detail=detail at entry=0) at ../../../../gobject/gsignal.c:3447
#6 0x00007f439742b4f0 in fm_job_emit_finished (job=0x558b83a39960) at job/fm-job.c:94
#7 on_idle_cleanup (unused=<optimized out>) at job/fm-job.c:578
#8 0x00007f439712dae8 in g_main_dispatch (context=0x558b837e52a0) at ../../../../glib/gmain.c:3182
#9 g_main_context_dispatch (context=context at entry=0x558b837e52a0) at ../../../../glib/gmain.c:3847
#10 0x00007f439712ded8 in g_main_context_iterate (context=0x558b837e52a0, block=block at entry=1, dispatch=dispatch at entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3920
#11 0x00007f439712e1d2 in g_main_loop_run (loop=0x558b83a39640) at ../../../../glib/gmain.c:4116
#12 0x00007f4397d288e7 in IA__gtk_main () at ./gtk/gtkmain.c:1270
#13 0x0000558b81b188d6 in main (argc=<optimized out>, argv=<optimized out>) at pcmanfm.c:282
It might not just related to high activity in the directory,
but also needs pressing or holding F5 for reloading the current directory.
With attached patch I was not able to get it to crash anymore.
The other attached file shows some details on debugging it.
Kind regards,
Bernhard
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 02-avoid-crash-on-reload-while-directory-changes.patch
Type: text/x-patch
Size: 833 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-lxde-maintainers/attachments/20181120/a99296b7/attachment-0001.bin>
-------------- next part --------------
https://wiki.debian.org/HowToGetABacktrace
##########
apt update
apt dist-upgrade
apt install systemd-coredump htop xserver-xorg lightdm openbox pcmanfm
systemctl start lightdm
export LANG=C
export DISPLAY=:0
##########
# terminal 1
taskset -c 0 pcmanfm
# terminal 2
mkdir x; cd x
taskset -c 0 nice -n 19 pcmanfm
for i in {1..100000}; do echo test > delete-$i; mkdir delete-dir-$i; echo test > delete-dir-$i/delete$i; rm delete-$i delete-dir-$i/delete$i; rmdir delete-dir-$i; done
# watching in pcmanfm that directory, some refresh F5 ... crash
benutzer at debian:~$ taskset -c 0 nice -n 19 pcmanfm
** Message: 11:38:05.509: x-terminal-emulator has very limited support, consider choose another terminal
(pcmanfm:27512): Gdk-WARNING **: 11:38:05.671: gdk_window_set_icon_list: icons too large
Segmentation fault (core dumped)
[ 1485.670647] pcmanfm[27512]: segfault at 0 ip 00007f4397417070 sp 00007ffca2ec9ed8 error 4 in libfm.so.4.1.1[7f43973fa000+48000]
[ 1485.670653] Code: 7d 58 48 83 ff ff 0f 85 e5 fe ff ff 48 89 7b 58 e9 e5 fe ff ff 0f 1f 44 00 00 48 8b 87 88 00 00 00 c3 0f 1f 84 00 00 00 00 00 <48> 8b 07 c3 66 90 66 2e 0f 1f 84 00 00 00 00 00 48 8b
root at debian:~# coredumpctl list
TIME PID UID GID SIG COREFILE EXE
Tue 2018-11-20 11:38:21 CET 27512 1000 1000 11 present /usr/bin/pcmanfm
root at debian:~# coredumpctl gdb 27512
PID: 27512 (pcmanfm)
UID: 1000 (benutzer)
GID: 1000 (benutzer)
Signal: 11 (SEGV)
Timestamp: Tue 2018-11-20 11:38:20 CET (1min 42s ago)
Command Line: pcmanfm
Executable: /usr/bin/pcmanfm
Control Group: /user.slice/user-1000.slice/session-6.scope
Unit: session-6.scope
Slice: user-1000.slice
Session: 6
Owner UID: 1000 (benutzer)
Boot ID: 867b6f2f07de46dab6f59fc032b7a93c
Machine ID: 32f43b50ac8c4b21941bc0b02f8e7811
Hostname: debian
Storage: /var/lib/systemd/coredump/core.pcmanfm.1000.867b6f2f07de46dab6f59fc032b7a93c.27512.1542710300000000.lz4
Message: Process 27512 (pcmanfm) of user 1000 dumped core.
Stack trace of thread 27512:
#0 0x00007f4397417070 fm_file_info_get_path (libfm.so.4)
#1 0x00007f4397419b7b n/a (libfm.so.4)
#2 0x00007f439720db6d g_closure_invoke (libgobject-2.0.so.0)
#3 0x00007f43972208f3 n/a (libgobject-2.0.so.0)
#4 0x00007f4397229882 g_signal_emit_valist (libgobject-2.0.so.0)
#5 0x00007f4397229ecf g_signal_emit (libgobject-2.0.so.0)
#6 0x00007f439742b4f0 n/a (libfm.so.4)
#7 0x00007f439712dae8 g_main_context_dispatch (libglib-2.0.so.0)
#8 0x00007f439712ded8 n/a (libglib-2.0.so.0)
#9 0x00007f439712e1d2 g_main_loop_run (libglib-2.0.so.0)
#10 0x00007f4397d288e7 gtk_main (libgtk-x11-2.0.so.0)
#11 0x0000558b81b188d6 n/a (pcmanfm)
#12 0x00007f4396d8eb17 __libc_start_main (libc.so.6)
#13 0x0000558b81b1894a n/a (pcmanfm)
Stack trace of thread 27596:
#0 0x00007f4396e5ea79 syscall (libc.so.6)
#1 0x00007f4397173cbc n/a (libglib-2.0.so.0)
#2 0x00007f439736786f n/a (libgio-2.0.so.0)
#3 0x00007f439712dae8 g_main_context_dispatch (libglib-2.0.so.0)
#4 0x00007f439712ded8 n/a (libglib-2.0.so.0)
#5 0x00007f439712df6c g_main_context_iteration (libglib-2.0.so.0)
#6 0x00007f439712dfb1 n/a (libglib-2.0.so.0)
#7 0x00007f4397156135 n/a (libglib-2.0.so.0)
#8 0x00007f4396f30f2a start_thread (libpthread.so.0)
#9 0x00007f4396e63edf __clone (libc.so.6)
Stack trace of thread 31524:
#0 0x00007f4396e5ea79 syscall (libc.so.6)
#1 0x00007f439717475a g_cond_wait_until (libglib-2.0.so.0)
#2 0x00007f4397100061 n/a (libglib-2.0.so.0)
#3 0x00007f4397156c12 n/a (libglib-2.0.so.0)
#4 0x00007f4397156135 n/a (libglib-2.0.so.0)
#5 0x00007f4396f30f2a start_thread (libpthread.so.0)
#6 0x00007f4396e63edf __clone (libc.so.6)
Stack trace of thread 11836:
#0 0x00007f4396e5ea79 syscall (libc.so.6)
#1 0x00007f439717475a g_cond_wait_until (libglib-2.0.so.0)
#2 0x00007f4397100061 n/a (libglib-2.0.so.0)
#3 0x00007f4397156c12 n/a (libglib-2.0.so.0)
#4 0x00007f4397156135 n/a (libglib-2.0.so.0)
#5 0x00007f4396f30f2a start_thread (libpthread.so.0)
#6 0x00007f4396e63edf __clone (libc.so.6)
Stack trace of thread 31525:
#0 0x00007f4396e5ea79 syscall (libc.so.6)
#1 0x00007f439717475a g_cond_wait_until (libglib-2.0.so.0)
#2 0x00007f4397100061 n/a (libglib-2.0.so.0)
#3 0x00007f4397156c12 n/a (libglib-2.0.so.0)
#4 0x00007f4397156135 n/a (libglib-2.0.so.0)
#5 0x00007f4396f30f2a start_thread (libpthread.so.0)
#6 0x00007f4396e63edf __clone (libc.so.6)
Failed to invoke gdb: Datei oder Verzeichnis nicht gefunden
##########
apt install systemd-coredump htop xserver-xorg lightdm openbox gdb pcmanfm
Core was generated by `pcmanfm'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f4397417070 in fm_file_info_get_path () from /usr/lib/x86_64-linux-gnu/libfm.so.4
[Current thread is 1 (Thread 0x7f4393fe3a80 (LWP 27512))]
(gdb) set width 0
(gdb) set pagination off
(gdb) bt
#0 0x00007f4397417070 in fm_file_info_get_path () from /usr/lib/x86_64-linux-gnu/libfm.so.4
#1 0x00007f4397419b7b in ?? () from /usr/lib/x86_64-linux-gnu/libfm.so.4
#2 0x00007f439720db6d in g_closure_invoke () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#3 0x00007f43972208f3 in ?? () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#4 0x00007f4397229882 in g_signal_emit_valist () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#5 0x00007f4397229ecf in g_signal_emit () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#6 0x00007f439742b4f0 in ?? () from /usr/lib/x86_64-linux-gnu/libfm.so.4
#7 0x00007f439712dae8 in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#8 0x00007f439712ded8 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#9 0x00007f439712e1d2 in g_main_loop_run () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#10 0x00007f4397d288e7 in gtk_main () from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#11 0x0000558b81b188d6 in ?? ()
#12 0x00007f4396d8eb17 in __libc_start_main (main=0x558b81b18610, argc=1, argv=0x7ffca2eca6a8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffca2eca698) at ../csu/libc-start.c:310
#13 0x0000558b81b1894a in ?? ()
apt install systemd-coredump htop xserver-xorg lightdm openbox gdb pcmanfm pcmanfm-dbg libfm-dbg libgtk2.0-0-dbgsym libglib2.0-0-dbgsym
Reading symbols from /usr/bin/pcmanfm...Reading symbols from /usr/lib/debug/.build-id/88/176f89bb6aa30cb94de32349c53f247f1ea046.debug...done.
done.
[New LWP 27512]
[New LWP 27596]
[New LWP 31524]
[New LWP 11836]
[New LWP 31525]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `pcmanfm'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 fm_file_info_get_path (fi=0x0) at base/fm-file-info.c:1028
1028 base/fm-file-info.c: Datei oder Verzeichnis nicht gefunden.
[Current thread is 1 (Thread 0x7f4393fe3a80 (LWP 27512))]
(gdb) set width 0
(gdb) set pagination off
(gdb) bt
#0 fm_file_info_get_path (fi=0x0) at base/fm-file-info.c:1028
#1 0x00007f4397419b7b in on_file_info_job_finished (job=0x558b83a39960, folder=0x558b83a2c230) at base/fm-folder.c:400
#2 0x00007f439720db6d in g_closure_invoke (closure=0x558b83a27170, return_value=0x0, n_param_values=1, param_values=0x7ffca2eca0f0, invocation_hint=0x7ffca2eca070) at ../../../../gobject/gclosure.c:810
#3 0x00007f43972208f3 in signal_emit_unlocked_R (node=node at entry=0x558b8380eb90, detail=detail at entry=0, instance=instance at entry=0x558b83a39960, emission_return=emission_return at entry=0x0, instance_and_params=instance_and_params at entry=0x7ffca2eca0f0) at ../../../../gobject/gsignal.c:3635
#4 0x00007f4397229882 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args at entry=0x7ffca2eca2a0) at ../../../../gobject/gsignal.c:3391
#5 0x00007f4397229ecf in g_signal_emit (instance=instance at entry=0x558b83a39960, signal_id=<optimized out>, detail=detail at entry=0) at ../../../../gobject/gsignal.c:3447
#6 0x00007f439742b4f0 in fm_job_emit_finished (job=0x558b83a39960) at job/fm-job.c:94
#7 on_idle_cleanup (unused=<optimized out>) at job/fm-job.c:578
#8 0x00007f439712dae8 in g_main_dispatch (context=0x558b837e52a0) at ../../../../glib/gmain.c:3182
#9 g_main_context_dispatch (context=context at entry=0x558b837e52a0) at ../../../../glib/gmain.c:3847
#10 0x00007f439712ded8 in g_main_context_iterate (context=0x558b837e52a0, block=block at entry=1, dispatch=dispatch at entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3920
#11 0x00007f439712e1d2 in g_main_loop_run (loop=0x558b83a39640) at ../../../../glib/gmain.c:4116
#12 0x00007f4397d288e7 in IA__gtk_main () at ./gtk/gtkmain.c:1270
#13 0x0000558b81b188d6 in main (argc=<optimized out>, argv=<optimized out>) at pcmanfm.c:282
(gdb) thread apply all bt
Thread 5 (Thread 0x7f43937bf700 (LWP 31525)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007f439717475a in g_cond_wait_until (cond=cond at entry=0x558b83a14a88, mutex=mutex at entry=0x558b83a14a80, end_time=end_time at entry=1486415050) at ../../../../glib/gthread-posix.c:1449
#2 0x00007f4397100061 in g_async_queue_pop_intern_unlocked (queue=0x558b83a14a80, wait=wait at entry=1, end_time=1486415050) at ../../../../glib/gasyncqueue.c:422
#3 0x00007f439710069d in g_async_queue_timeout_pop_unlocked (queue=<optimized out>, timeout=timeout at entry=500000) at ../../../../glib/gasyncqueue.c:574
#4 0x00007f4397156c12 in g_thread_pool_wait_for_new_task (pool=<optimized out>) at ../../../../glib/gthreadpool.c:262
#5 g_thread_pool_thread_proxy (data=<optimized out>) at ../../../../glib/gthreadpool.c:296
#6 0x00007f4397156135 in g_thread_proxy (data=0x558b83a1a1e0) at ../../../../glib/gthread.c:784
#7 0x00007f4396f30f2a in start_thread (arg=0x7f43937bf700) at pthread_create.c:463
#8 0x00007f4396e63edf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 4 (Thread 0x7f4390ecb700 (LWP 11836)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007f439717475a in g_cond_wait_until (cond=cond at entry=0x7f438c019208, mutex=mutex at entry=0x7f438c019200, end_time=end_time at entry=1486427602) at ../../../../glib/gthread-posix.c:1449
#2 0x00007f4397100061 in g_async_queue_pop_intern_unlocked (queue=0x7f438c019200, wait=wait at entry=1, end_time=1486427602) at ../../../../glib/gasyncqueue.c:422
#3 0x00007f439710069d in g_async_queue_timeout_pop_unlocked (queue=<optimized out>, timeout=timeout at entry=500000) at ../../../../glib/gasyncqueue.c:574
#4 0x00007f4397156c12 in g_thread_pool_wait_for_new_task (pool=<optimized out>) at ../../../../glib/gthreadpool.c:262
#5 g_thread_pool_thread_proxy (data=<optimized out>) at ../../../../glib/gthreadpool.c:296
#6 0x00007f4397156135 in g_thread_proxy (data=0x558b83aa0680) at ../../../../glib/gthread.c:784
#7 0x00007f4396f30f2a in start_thread (arg=0x7f4390ecb700) at pthread_create.c:463
#8 0x00007f4396e63edf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 3 (Thread 0x7f439174c700 (LWP 31524)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007f439717475a in g_cond_wait_until (cond=cond at entry=0x558b83a14a88, mutex=mutex at entry=0x558b83a14a80, end_time=end_time at entry=1486383200) at ../../../../glib/gthread-posix.c:1449
#2 0x00007f4397100061 in g_async_queue_pop_intern_unlocked (queue=0x558b83a14a80, wait=wait at entry=1, end_time=1486383200) at ../../../../glib/gasyncqueue.c:422
#3 0x00007f439710069d in g_async_queue_timeout_pop_unlocked (queue=<optimized out>, timeout=timeout at entry=500000) at ../../../../glib/gasyncqueue.c:574
#4 0x00007f4397156c12 in g_thread_pool_wait_for_new_task (pool=<optimized out>) at ../../../../glib/gthreadpool.c:262
#5 g_thread_pool_thread_proxy (data=<optimized out>) at ../../../../glib/gthreadpool.c:296
#6 0x00007f4397156135 in g_thread_proxy (data=0x558b83a1a140) at ../../../../glib/gthread.c:784
#7 0x00007f4396f30f2a in start_thread (arg=0x7f439174c700) at pthread_create.c:463
#8 0x00007f4396e63edf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 2 (Thread 0x7f4393fe2700 (LWP 27596)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007f4397173cbc in g_mutex_lock_slowpath (mutex=mutex at entry=0x7f43973f4258 <g.inotify_lock_lock>) at ../../../../glib/gthread-posix.c:1320
#2 0x00007f4397174512 in g_mutex_lock (mutex=mutex at entry=0x7f43973f4258 <g.inotify_lock_lock>) at ../../../../glib/gthread-posix.c:1344
#3 0x00007f439736786f in ik_source_dispatch (source=0x558b83805320, func=0x7f4397368470 <ip_event_callback>, user_data=<optimized out>) at ../../../../../gio/inotify/inotify-kernel.c:322
#4 0x00007f439712dae8 in g_main_dispatch (context=0x558b83805440) at ../../../../glib/gmain.c:3182
#5 g_main_context_dispatch (context=context at entry=0x558b83805440) at ../../../../glib/gmain.c:3847
#6 0x00007f439712ded8 in g_main_context_iterate (context=context at entry=0x558b83805440, block=block at entry=1, dispatch=dispatch at entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3920
#7 0x00007f439712df6c in g_main_context_iteration (context=0x558b83805440, may_block=may_block at entry=1) at ../../../../glib/gmain.c:3981
#8 0x00007f439712dfb1 in glib_worker_main (data=<optimized out>) at ../../../../glib/gmain.c:5861
#9 0x00007f4397156135 in g_thread_proxy (data=0x558b837fa050) at ../../../../glib/gthread.c:784
#10 0x00007f4396f30f2a in start_thread (arg=0x7f4393fe2700) at pthread_create.c:463
#11 0x00007f4396e63edf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 1 (Thread 0x7f4393fe3a80 (LWP 27512)):
#0 fm_file_info_get_path (fi=0x0) at base/fm-file-info.c:1028
#1 0x00007f4397419b7b in on_file_info_job_finished (job=0x558b83a39960, folder=0x558b83a2c230) at base/fm-folder.c:400
#2 0x00007f439720db6d in g_closure_invoke (closure=0x558b83a27170, return_value=0x0, n_param_values=1, param_values=0x7ffca2eca0f0, invocation_hint=0x7ffca2eca070) at ../../../../gobject/gclosure.c:810
#3 0x00007f43972208f3 in signal_emit_unlocked_R (node=node at entry=0x558b8380eb90, detail=detail at entry=0, instance=instance at entry=0x558b83a39960, emission_return=emission_return at entry=0x0, instance_and_params=instance_and_params at entry=0x7ffca2eca0f0) at ../../../../gobject/gsignal.c:3635
#4 0x00007f4397229882 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args at entry=0x7ffca2eca2a0) at ../../../../gobject/gsignal.c:3391
#5 0x00007f4397229ecf in g_signal_emit (instance=instance at entry=0x558b83a39960, signal_id=<optimized out>, detail=detail at entry=0) at ../../../../gobject/gsignal.c:3447
#6 0x00007f439742b4f0 in fm_job_emit_finished (job=0x558b83a39960) at job/fm-job.c:94
#7 on_idle_cleanup (unused=<optimized out>) at job/fm-job.c:578
#8 0x00007f439712dae8 in g_main_dispatch (context=0x558b837e52a0) at ../../../../glib/gmain.c:3182
#9 g_main_context_dispatch (context=context at entry=0x558b837e52a0) at ../../../../glib/gmain.c:3847
#10 0x00007f439712ded8 in g_main_context_iterate (context=0x558b837e52a0, block=block at entry=1, dispatch=dispatch at entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3920
#11 0x00007f439712e1d2 in g_main_loop_run (loop=0x558b83a39640) at ../../../../glib/gmain.c:4116
#12 0x00007f4397d288e7 in IA__gtk_main () at ./gtk/gtkmain.c:1270
#13 0x0000558b81b188d6 in main (argc=<optimized out>, argv=<optimized out>) at pcmanfm.c:282
#############
apt install systemd-coredump htop xserver-xorg lightdm openbox gdb pcmanfm pcmanfm-dbg libfm-dbg libgtk2.0-0-dbgsym libglib2.0-0-dbgsym devscripts dpkg-dev
mkdir libfm/orig -p
cd libfm/orig
apt source libfm
cd ../..
(gdb) bt
#0 fm_file_info_get_path (fi=0x0) at base/fm-file-info.c:1028
#1 0x00007f4397419b7b in on_file_info_job_finished (job=0x558b83a39960, folder=0x558b83a2c230) at base/fm-folder.c:400
#2 0x00007f439720db6d in g_closure_invoke (closure=0x558b83a27170, return_value=0x0, n_param_values=1, param_values=0x7ffca2eca0f0, invocation_hint=0x7ffca2eca070) at ../../../../gobject/gclosure.c:810
#3 0x00007f43972208f3 in signal_emit_unlocked_R (node=node at entry=0x558b8380eb90, detail=detail at entry=0, instance=instance at entry=0x558b83a39960, emission_return=emission_return at entry=0x0, instance_and_params=instance_and_params at entry=0x7ffca2eca0f0) at ../../../../gobject/gsignal.c:3635
#4 0x00007f4397229882 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args at entry=0x7ffca2eca2a0) at ../../../../gobject/gsignal.c:3391
#5 0x00007f4397229ecf in g_signal_emit (instance=instance at entry=0x558b83a39960, signal_id=<optimized out>, detail=detail at entry=0) at ../../../../gobject/gsignal.c:3447
#6 0x00007f439742b4f0 in fm_job_emit_finished (job=0x558b83a39960) at job/fm-job.c:94
#7 on_idle_cleanup (unused=<optimized out>) at job/fm-job.c:578
#8 0x00007f439712dae8 in g_main_dispatch (context=0x558b837e52a0) at ../../../../glib/gmain.c:3182
#9 g_main_context_dispatch (context=context at entry=0x558b837e52a0) at ../../../../glib/gmain.c:3847
#10 0x00007f439712ded8 in g_main_context_iterate (context=0x558b837e52a0, block=block at entry=1, dispatch=dispatch at entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3920
#11 0x00007f439712e1d2 in g_main_loop_run (loop=0x558b83a39640) at ../../../../glib/gmain.c:4116
#12 0x00007f4397d288e7 in IA__gtk_main () at ./gtk/gtkmain.c:1270
#13 0x0000558b81b188d6 in main (argc=<optimized out>, argv=<optimized out>) at pcmanfm.c:282
(gdb) disassemble /m fm_file_info_get_path
Dump of assembler code for function fm_file_info_get_path:
1027 {
1028 return fi->path;
=> 0x00007f4397417070 <+0>: mov (%rdi),%rax
1029 }
0x00007f4397417073 <+3>: retq
0x00007f4397417074: xchg %ax,%ax
0x00007f4397417076: nopw %cs:0x0(%rax,%rax,1)
End of assembler dump.
(gdb) print fi
$1 = (FmFileInfo *) 0x0
(gdb) up
#1 0x00007f4397419b7b in on_file_info_job_finished (job=0x558b83a39960, folder=0x558b83a2c230) at base/fm-folder.c:400
400 if (path == fm_file_info_get_path(folder->dir_fi))
(gdb) list fm-folder.c:385,438
385 static void on_file_info_job_finished(FmFileInfoJob* job, FmFolder* folder)
386 {
387 GList* l;
388 GSList* files_to_add = NULL;
389 GSList* files_to_update = NULL;
390 if(!fm_job_is_cancelled(FM_JOB(job)))
391 {
392 gboolean need_added = g_signal_has_handler_pending(folder, signals[FILES_ADDED], 0, TRUE);
393 gboolean need_changed = g_signal_has_handler_pending(folder, signals[FILES_CHANGED], 0, TRUE);
394
395 for(l=fm_file_info_list_peek_head_link(job->file_infos);l;l=l->next)
396 {
397 FmFileInfo* fi = (FmFileInfo*)l->data;
398 FmPath* path = fm_file_info_get_path(fi);
399 GList* l2;
400 if (path == fm_file_info_get_path(folder->dir_fi)) <<<<<<<<<<<<<<<
401 /* update for folder itself, also see FIXME below! */
402 fm_file_info_update(folder->dir_fi, fi);
403 else if ((l2 = _fm_folder_get_file_by_path(folder, path)))
404 /* the file is already in the folder, update */
405 {
406 FmFileInfo* fi2 = (FmFileInfo*)l2->data;
407 /* FIXME: will fm_file_info_update here cause problems?
408 * the file info might be referenced by others, too.
409 * we're mofifying an object referenced by others.
410 * we should redesign the API, or document this clearly
411 * in future API doc.
412 */
413 fm_file_info_update(fi2, fi);
414 if(need_changed)
415 files_to_update = g_slist_prepend(files_to_update, fi2);
416 }
417 else
418 {
419 if(need_added)
420 files_to_add = g_slist_prepend(files_to_add, fi);
421 fm_file_info_list_push_tail(folder->files, fi);
422 }
423 }
424 if(files_to_add)
425 {
426 g_signal_emit(folder, signals[FILES_ADDED], 0, files_to_add);
427 g_slist_free(files_to_add);
428 }
429 if(files_to_update)
430 {
431 g_signal_emit(folder, signals[FILES_CHANGED], 0, files_to_update);
432 g_slist_free(files_to_update);
433 }
434 g_signal_emit(folder, signals[CONTENT_CHANGED], 0);
435 }
436 folder->pending_jobs = g_slist_remove(folder->pending_jobs, job);
437 g_object_unref(job);
438 }
(gdb) print folder->dir_fi
$2 = (FmFileInfo *) 0x0
(gdb) print folder
$3 = (FmFolder *) 0x558b83a2c230
set width 0
set pagination off
directory /home/benutzer/libfm/orig/libfm-1.3.0.2/src
##############
apt build-dep libfm
void fm_folder_reload(FmFolder* folder)
...
- folder->dir_fi = NULL;
+ folder->dir_fi = NULL; fprintf(stderr, "%s:%d: folder=%p\n", __FUNCTION__, __LINE__, folder); fflush(stderr);
benutzer at debian:~$ cd libfm
benutzer at debian:~/libfm$ cp orig try1 -a
benutzer at debian:~/libfm$ cd try1
benutzer at debian:~/libfm/try1$ cd libfm-1.3.0.2/
benutzer at debian:~/libfm/try1/libfm-1.3.0.2$ dpkg-buildpackage -b
...
make[3]: Verzeichnis „/home/benutzer/libfm/try1/libfm-1.3.0.2/src/tests“ wird betreten
TEST: fm-path... (pid=3620)
** Message: 13:07:25.782: x-terminal-emulator has very limited support, consider choose another terminal
Tests were compiled with G_DISABLE_ASSERT and are likely no-ops. Aborting.
FAIL: fm-path
--> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907945
benutzer at debian:~$ export LD_PRELOAD=/home/benutzer/libfm/try1/libfm-1.3.0.2/src/.libs/libfm.so.4.1.1
benutzer at debian:~$ taskset -c 0 nice -n 19 pcmanfm 2>output.txt
Segmentation fault (core dumped)
benutzer at debian:~$ cat output.txt
** Message: 13:07:48.587: x-terminal-emulator has very limited support, consider choose another terminal
(pcmanfm:19042): Gdk-WARNING **: 13:07:48.891: gdk_window_set_icon_list: icons too large
fm_folder_dispose:983: folder=0x56198d55d500
fm_folder_reload:1120: folder=0x56198d4dd0e0
(gdb) set width 0
(gdb) set pagination off
(gdb) bt
#0 0x00007f14c808c000 in fm_file_info_get_path (fi=0x0) at base/fm-file-info.c:1028
#1 0x00007f14c808ebb9 in on_file_info_job_finished (job=0x56198d560650 [FmFileInfoJob], folder=0x56198d4dd0e0 [FmFolder]) at base/fm-folder.c:400
#5 0x00007f14c70eaecf in <emit signal ??? on instance 0x56198d560650 [FmFileInfoJob]> (instance=instance at entry=0x56198d560650, signal_id=<optimized out>, detail=detail at entry=0) at ../../../../gobject/gsignal.c:3447
#2 0x00007f14c70ceb6d in g_closure_invoke (closure=0x56198d5ae430, return_value=0x0, n_param_values=1, param_values=0x7fff38daef30, invocation_hint=0x7fff38daeeb0) at ../../../../gobject/gclosure.c:810
#3 0x00007f14c70e18f3 in signal_emit_unlocked_R (node=node at entry=0x56198d3a04d0, detail=detail at entry=0, instance=instance at entry=0x56198d560650, emission_return=emission_return at entry=0x0, instance_and_params=instance_and_params at entry=0x7fff38daef30) at ../../../../gobject/gsignal.c:3635
#4 0x00007f14c70ea882 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args at entry=0x7fff38daf0e0) at ../../../../gobject/gsignal.c:3391
#6 0x00007f14c80a08b0 in fm_job_emit_finished (job=0x56198d560650 [FmFileInfoJob]) at job/fm-job.c:578
#7 0x00007f14c80a08b0 in on_idle_cleanup (unused=<optimized out>) at job/fm-job.c:578
#8 0x00007f14c6feeae8 in g_main_dispatch (context=0x56198d381570) at ../../../../glib/gmain.c:3182
#9 0x00007f14c6feeae8 in g_main_context_dispatch (context=context at entry=0x56198d381570) at ../../../../glib/gmain.c:3847
#10 0x00007f14c6feeed8 in g_main_context_iterate (context=0x56198d381570, block=block at entry=1, dispatch=dispatch at entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3920
#11 0x00007f14c6fef1d2 in g_main_loop_run (loop=0x56198d4c5660) at ../../../../glib/gmain.c:4116
#12 0x00007f14c799e8e7 in IA__gtk_main () at ./gtk/gtkmain.c:1270
#13 0x000056198cd728d6 in main (argc=<optimized out>, argv=<optimized out>) at pcmanfm.c:282
--> fm_folder_reload set folder-dir_fi to NULL on purpose ? <-- folder=0x56198d4dd0e0 in output.txt and stack
##############
static void on_file_info_job_finished(FmFileInfoJob* job, FmFolder* folder)
...
- if (path == fm_file_info_get_path(folder->dir_fi))
+ if (fm_folder_is_valid(folder) && path == fm_file_info_get_path(folder->dir_fi))
benutzer at debian:~$ cd libfm/
benutzer at debian:~/libfm$ cp orig try2 -a
benutzer at debian:~/libfm$ cd try2/libfm-1.3.0.2/
benutzer at debian:~/libfm/try2/libfm-1.3.0.2$ dpkg-buildpackage -b
# Could not get it to crash anymore.
##############
https://git.lxde.org/gitweb/?p=lxde/libfm.git;a=commitdiff;h=b0d178ef0e0a5c5a064c2f8a284fbba4760023dc
More information about the Pkg-lxde-maintainers
mailing list