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@entry=0x558b8380eb90, detail=detail@entry=0, instance=instance@entry=0x558b83a39960, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@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@entry=0x7ffca2eca2a0) at ../../../../gobject/gsignal.c:3391 #5 0x00007f4397229ecf in g_signal_emit (instance=instance@entry=0x558b83a39960, signal_id=<optimized out>, detail=detail@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@entry=0x558b837e52a0) at ../../../../glib/gmain.c:3847 #10 0x00007f439712ded8 in g_main_context_iterate (context=0x558b837e52a0, block=block@entry=1, dispatch=dispatch@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
Description: Avoid crash on reload while directory changes --- Author: Bernhard Ãbelacker <bernha...@mailbox.org> Bug-Debian: https://bugs.debian.org/914150 Forwarded: no Last-Update: 2018-11-20 --- libfm-1.3.0.2.orig/src/base/fm-folder.c +++ libfm-1.3.0.2/src/base/fm-folder.c @@ -397,7 +397,7 @@ static void on_file_info_job_finished(Fm FmFileInfo* fi = (FmFileInfo*)l->data; FmPath* path = fm_file_info_get_path(fi); GList* l2; - 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)) /* update for folder itself, also see FIXME below! */ fm_file_info_update(folder->dir_fi, fi); else if ((l2 = _fm_folder_get_file_by_path(folder, path)))
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@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@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@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@entry=0x558b8380eb90, detail=detail@entry=0, instance=instance@entry=0x558b83a39960, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@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@entry=0x7ffca2eca2a0) at ../../../../gobject/gsignal.c:3391 #5 0x00007f4397229ecf in g_signal_emit (instance=instance@entry=0x558b83a39960, signal_id=<optimized out>, detail=detail@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@entry=0x558b837e52a0) at ../../../../glib/gmain.c:3847 #10 0x00007f439712ded8 in g_main_context_iterate (context=0x558b837e52a0, block=block@entry=1, dispatch=dispatch@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@entry=0x558b83a14a88, mutex=mutex@entry=0x558b83a14a80, end_time=end_time@entry=1486415050) at ../../../../glib/gthread-posix.c:1449 #2 0x00007f4397100061 in g_async_queue_pop_intern_unlocked (queue=0x558b83a14a80, wait=wait@entry=1, end_time=1486415050) at ../../../../glib/gasyncqueue.c:422 #3 0x00007f439710069d in g_async_queue_timeout_pop_unlocked (queue=<optimized out>, timeout=timeout@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@entry=0x7f438c019208, mutex=mutex@entry=0x7f438c019200, end_time=end_time@entry=1486427602) at ../../../../glib/gthread-posix.c:1449 #2 0x00007f4397100061 in g_async_queue_pop_intern_unlocked (queue=0x7f438c019200, wait=wait@entry=1, end_time=1486427602) at ../../../../glib/gasyncqueue.c:422 #3 0x00007f439710069d in g_async_queue_timeout_pop_unlocked (queue=<optimized out>, timeout=timeout@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@entry=0x558b83a14a88, mutex=mutex@entry=0x558b83a14a80, end_time=end_time@entry=1486383200) at ../../../../glib/gthread-posix.c:1449 #2 0x00007f4397100061 in g_async_queue_pop_intern_unlocked (queue=0x558b83a14a80, wait=wait@entry=1, end_time=1486383200) at ../../../../glib/gasyncqueue.c:422 #3 0x00007f439710069d in g_async_queue_timeout_pop_unlocked (queue=<optimized out>, timeout=timeout@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@entry=0x7f43973f4258 <g.inotify_lock_lock>) at ../../../../glib/gthread-posix.c:1320 #2 0x00007f4397174512 in g_mutex_lock (mutex=mutex@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@entry=0x558b83805440) at ../../../../glib/gmain.c:3847 #6 0x00007f439712ded8 in g_main_context_iterate (context=context@entry=0x558b83805440, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3920 #7 0x00007f439712df6c in g_main_context_iteration (context=0x558b83805440, may_block=may_block@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@entry=0x558b8380eb90, detail=detail@entry=0, instance=instance@entry=0x558b83a39960, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@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@entry=0x7ffca2eca2a0) at ../../../../gobject/gsignal.c:3391 #5 0x00007f4397229ecf in g_signal_emit (instance=instance@entry=0x558b83a39960, signal_id=<optimized out>, detail=detail@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@entry=0x558b837e52a0) at ../../../../glib/gmain.c:3847 #10 0x00007f439712ded8 in g_main_context_iterate (context=0x558b837e52a0, block=block@entry=1, dispatch=dispatch@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@entry=0x558b8380eb90, detail=detail@entry=0, instance=instance@entry=0x558b83a39960, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@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@entry=0x7ffca2eca2a0) at ../../../../gobject/gsignal.c:3391 #5 0x00007f4397229ecf in g_signal_emit (instance=instance@entry=0x558b83a39960, signal_id=<optimized out>, detail=detail@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@entry=0x558b837e52a0) at ../../../../glib/gmain.c:3847 #10 0x00007f439712ded8 in g_main_context_iterate (context=0x558b837e52a0, block=block@entry=1, dispatch=dispatch@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@debian:~$ cd libfm benutzer@debian:~/libfm$ cp orig try1 -a benutzer@debian:~/libfm$ cd try1 benutzer@debian:~/libfm/try1$ cd libfm-1.3.0.2/ benutzer@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@debian:~$ export LD_PRELOAD=/home/benutzer/libfm/try1/libfm-1.3.0.2/src/.libs/libfm.so.4.1.1 benutzer@debian:~$ taskset -c 0 nice -n 19 pcmanfm 2>output.txt Segmentation fault (core dumped) benutzer@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@entry=0x56198d560650, signal_id=<optimized out>, detail=detail@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@entry=0x56198d3a04d0, detail=detail@entry=0, instance=instance@entry=0x56198d560650, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@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@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@entry=0x56198d381570) at ../../../../glib/gmain.c:3847 #10 0x00007f14c6feeed8 in g_main_context_iterate (context=0x56198d381570, block=block@entry=1, dispatch=dispatch@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@debian:~$ cd libfm/ benutzer@debian:~/libfm$ cp orig try2 -a benutzer@debian:~/libfm$ cd try2/libfm-1.3.0.2/ benutzer@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