#624 Ctrl + c should exit PCManFM without segmentation fault

1.1
closed-fixed
libfm (279)
7
2012-10-07
2012-10-07
Paul Menzel
No

Running PCManFM from Git

pcmanfm$ git describe
1.0.1-65-ge4c499c

in a terminal in foreground and hitting Ctrl +c I get a segmentation fault.

pcmanfm[3495]: segfault at 2c ip 00007f16d7d4b680 sp 00007fff3d7b18e8 error 4 in libglib-2.0.so.0.3200.3[7f16d7d02000+f5000]

In my experience other programs do not quit with a SIGSEGV, so maybe PCManFM could be adapted to not crash either and just quit. If not only for avoiding messages in the Linux kernel ring buffer and not scaring users. ;-)

Here is the backtrace.

Thread 4 (Thread 0x7fffef603700 (LWP 7526)):
#0 0x00007ffff4474ac3 in *__GI___poll (fds=<optimized out>, nfds=<optimized out>, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:87
_a3 = -1
_a1 = 93824996996096
resultvar = <optimized out>
_a2 = 1
oldtype = 0
result = <optimized out>
#1 0x00007ffff4e1b4d4 in g_main_context_poll (n_fds=1, fds=0x5555559df400, timeout=-1, context=0x5555559dd800, priority=<optimized out>)
at /tmp/buildd/glib2.0-2.32.3/./glib/gmain.c:3440
poll_func = 0x7ffff4e292c0 <g_poll>
#2 g_main_context_iterate (context=0x5555559dd800, block=block@entry=1, dispatch=dispatch@entry=1,
self=<error reading variable: Unhandled dwarf expression opcode 0xfa>) at /tmp/buildd/glib2.0-2.32.3/./glib/gmain.c:3141
max_priority = 2147483647
timeout = -1
some_ready = <optimized out>
nfds = 1
allocated_nfds = <optimized out>
fds = 0x5555559df400
#3 0x00007ffff4e1b932 in g_main_loop_run (loop=0x5555559df2f0) at /tmp/buildd/glib2.0-2.32.3/./glib/gmain.c:3340
__PRETTY_FUNCTION__ = "g_main_loop_run"
#4 0x00007ffff53e47f6 in gdbus_shared_thread_func (user_data=0x5555559dd7d0) at /tmp/buildd/glib2.0-2.32.3/./gio/gdbusprivate.c:277
data = 0x5555559dd7d0
#5 0x00007ffff4e3ddf5 in g_thread_proxy (data=0x5555559dc800) at /tmp/buildd/glib2.0-2.32.3/./glib/gthread.c:801
thread = 0x5555559dc800
#6 0x00007ffff4734b50 in start_thread (arg=<optimized out>) at pthread_create.c:304
__res = <optimized out>
pd = 0x7fffef603700
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140737209448192, -2927196479540965793, 140737488340816, 140737209448896,
140737354125376, 3, 2927160055429058143, 2927175557013818975}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0},
data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
freesize = <optimized out>
__PRETTY_FUNCTION__ = "start_thread"
#7 0x00007ffff447f70d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
No locals.
#8 0x0000000000000000 in ?? ()
No symbol table info available.

Thread 1 (Thread 0x7ffff7fd0920 (LWP 7503)):
#0 g_source_is_destroyed (source=0x0) at /tmp/buildd/glib2.0-2.32.3/./glib/gmain.c:2414
No locals.
#1 0x00007ffff7884715 in clear_src_cache (user_data=user_data@entry=0x555555830c60) at gtk/fm-dnd-dest.c:394
dd = 0x555555830c60
#2 0x00007ffff7884e95 in fm_dnd_dest_dispose (object=0x555555830c60) at gtk/fm-dnd-dest.c:219
dd = 0x555555830c60
__PRETTY_FUNCTION__ = "fm_dnd_dest_dispose"
#3 0x00007ffff50de604 in g_object_unref (_object=0x555555830c60) at /tmp/buildd/glib2.0-2.32.3/./gobject/gobject.c:2981
weak_locations = 0x0
object = 0x555555830c60
old_ref = <optimized out>
__PRETTY_FUNCTION__ = "g_object_unref"
#4 0x000055555556cc8d in fm_desktop_destroy (object=0x7fffe8001000) at desktop.c:2424
self = 0x7fffe8001000
screen = 0x5555557b3000
#5 0x00007ffff50d9724 in g_closure_invoke (closure=0x5555558121a0, return_value=0x0, n_param_values=1, param_values=0x7fffffffda90,
invocation_hint=0x7fffffffda30) at /tmp/buildd/glib2.0-2.32.3/./gobject/gclosure.c:777
marshal = 0x7ffff50d8330 <g_type_class_meta_marshal>
marshal_data = 0x98
in_marshal = <optimized out>
real_closure = 0x555555812180
__PRETTY_FUNCTION__ = "g_closure_invoke"
#6 0x00007ffff50eaac5 in signal_emit_unlocked_R (node=node@entry=0x555555812360, detail=detail@entry=0,
instance=instance@entry=0x7fffe8001000, emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7fffffffda90) at /tmp/buildd/glib2.0-2.32.3/./gobject/gsignal.c:3663
need_unset = <optimized out>
accumulator = 0x0
emission = {next = 0x0, instance = 0x7fffe8001000, ihint = {signal_id = 56, detail = 0, run_type = G_SIGNAL_RUN_CLEANUP},
state = EMISSION_STOP, chain_type = 93824995106128}
class_closure = 0x5555558121a0
hlist = 0x0
handler_list = 0x0
return_accu = 0x0
accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0,
v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0,
v_pointer = 0x0}}}
signal_id = 56
max_sequential_handler_number = 358
return_value_altered = <optimized out>
#7 0x00007ffff50f272c in g_signal_emit_valist (instance=0x7fffe8001000, signal_id=<optimized out>, detail=0,
var_args=var_args@entry=0x7fffffffdcd8) at /tmp/buildd/glib2.0-2.32.3/./gobject/gsignal.c:3296
instance_and_params = 0x7fffffffda90
signal_return_type = 4
param_values = 0x7fffffffdaa8
node = 0x555555812360
i = <optimized out>
n_params = 0
__PRETTY_FUNCTION__ = "g_signal_emit_valist"
#8 0x00007ffff50f28c2 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>)
at /tmp/buildd/glib2.0-2.32.3/./gobject/gsignal.c:3352
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffddb0, reg_save_area = 0x7fffffffdcf0}}
#9 0x00007ffff7363b70 in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
No symbol table info available.
#10 0x00007ffff50df7a0 in g_object_run_dispose (object=0x7fffe8001000) at /tmp/buildd/glib2.0-2.32.3/./gobject/gobject.c:1061
__PRETTY_FUNCTION__ = "g_object_run_dispose"
#11 0x000055555556eeb4 in fm_desktop_manager_finalize () at desktop.c:2887
i = <optimized out>
#12 0x00005555555646e5 in main (argc=1, argv=0x7fffffffdf38) at pcmanfm.c:237
config = 0x5555557bd040
err = 0x0
inst = {prog_name = 0x555555571836 "pcmanfm", cb = 0x555555564e80 <single_inst_cb>, opt_entries = 0x5555557790b0, screen_num = 0,
io_channel = 0x555555781930, sock = 9, io_watch = 2}
quit
A debugging session is active.

Inferior 1 [process 7503] will be killed.

Quit anyway? (y or n) Not confirmed.
Continuing.
[Thread 0x7fffef603700 (LWP 7526) exited]

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
quit

Discussion

  • We hope this issue is completely fixed in the Git repository recently.
    Check it out when it's possible for you and if the bug still exists then reopen the report, please.
    Thank you very much.

     
    • labels: --> libfm
    • priority: 5 --> 7
    • assigned_to: nobody --> lstranger
    • status: open --> closed-fixed