[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