g-s-d crashes due to FD leak in tmp-cleaner
@bigon
Submitted by Laurent Bigonville Link to original bug (#784493)
Description
Hi,
We go teh following bugreport in debian:
====
I noticed that gnome-settings-daemon regularly crashes and restarts on my system.
I investigated this with gdb and got the following backtrace:
#0 0x00007f00e6aac261 in _g_log_abort (breakpoint=1) at ././glib/gmessages.c:487
#1 0x00007f00e6aad2b7 in g_log_default_handler (log_domain=0x7f00e6aeed2e "GLib", log_level=6, message=<optimized out>, unused_data=<optimized out>) at ././glib/gmessages.c:2816
#2 0x00007f00e6aad5c4 in g_logv (log_domain=0x7f00e6aeed2e "GLib", log_level=G_LOG_LEVEL_ERROR, format=<optimized out>, args=args@entry=0x7ffd0faba4c0) at ././glib/gmessages.c:1275
#3 0x00007f00e6aad7cf in g_log (log_domain=log_domain@entry=0x7f00e6aeed2e "GLib", log_level=log_level@entry=G_LOG_LEVEL_ERROR, format=format@entry=0x7f00e6b4eaa0 "Creating pipes for GWakeup: %s\n") at ././glib/gmessages.c:1337
#4 0x00007f00e6aeabf2 in g_wakeup_new () at ././glib/gwakeup.c:161
#5 0x00007f00e6aa4083 in g_main_context_new () at ././glib/gmain.c:656
#6 0x00007f00e708080e in g_dbus_connection_send_message_with_reply_sync (connection=connection@entry=0x769190 [GDBusConnection], message=message@entry=0xb802d0 [GDBusMessage], flags=flags@entry=G_DBUS_SEND_MESSAGE_FLAGS_NONE, timeout_msec=timeout_msec@entry=-1, out_serial=out_serial@entry=0x0, cancellable=cancellable@entry=0x0, error=0x7ffd0faba6a0) at ././gio/gdbusconnection.c:2138
#7 0x00007f00e7080c74 in g_dbus_connection_call_sync_internal (connection=0x769190 [GDBusConnection], bus_name=bus_name@entry=0xaea530 ":1.114", object_path=0xcfb7d0 "/org/gtk/vfs/metadata", interface_name=interface_name@entry=0xb6f440 "org.gtk.vfs.Metadata", method_name=method_name@entry=0x7f00dc269d2a "GetTreeFromDevice", parameters=parameters@entry=0x986f90, reply_type=0xb2cec0, flags=G_DBUS_CALL_FLAGS_NONE, timeout_msec=-1, fd_list=0x0, out_fd_list=0x0, cancellable=0x0, error=0x7ffd0faba880) at ././gio/gdbusconnection.c:5935
#8 0x00007f00e7083025 in g_dbus_connection_call_with_unix_fd_list_sync (connection=<optimized out>, bus_name=bus_name@entry=0xaea530 ":1.114", object_path=<optimized out>, interface_name=interface_name@entry=0xb6f440 "org.gtk.vfs.Metadata", method_name=method_name@entry=0x7f00dc269d2a "GetTreeFromDevice", parameters=parameters@entry=0x986f90, reply_type=0xb2cec0, flags=G_DBUS_CALL_FLAGS_NONE, timeout_msec=-1, fd_list=0x0, out_fd_list=0x0, cancellable=0x0, error=0x7ffd0faba880) at ././gio/gdbusconnection.c:6281
#9 0x00007f00e708cd1d in g_dbus_proxy_call_sync_internal (proxy=0x7f009c011d60 [GVfsMetadataProxy], method_name=<optimized out>, parameters=0x986f90, flags=G_DBUS_CALL_FLAGS_NONE, timeout_msec=<optimized out>, fd_list=fd_list@entry=0x0, out_fd_list=0x0, cancellable=0x0, error=0x7ffd0faba880)
at ././gio/gdbusproxy.c:2857
#10 0x00007f00e708e0a4 in g_dbus_proxy_call_sync (proxy=<optimized out>, method_name=<optimized out>, parameters=<optimized out>, flags=<optimized out>, timeout_msec=<optimized out>, cancellable=<optimized out>, error=0x7ffd0faba880) at ././gio/gdbusproxy.c:3049
#11 0x00007f00dc267248 in () at /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
#12 0x00007f00dc2640de in () at /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
#13 0x00007f00dc24e685 in () at /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
#14 0x00007f00e70a132a in g_local_file_delete (file=0xba22c0, cancellable=<optimized out>, error=0x0) at ././gio/glocalfile.c:1551
#15 0x00007f00dc47a485 in delete_subdir (source=<optimized out>, res=0xb04c40, user_data=0x924d30) at gsd-disk-space.c:383
#16 0x00007f00e704d4e3 in g_task_return_now (task=0xb04c40 [GTask]) at ././gio/gtask.c:1121
#17 0x00007f00e704d519 in complete_in_idle_cb (task=0xb04c40) at ././gio/gtask.c:1135
#18 0x00007f00e6aa66aa in g_main_dispatch (context=0x750600) at ././glib/gmain.c:3203
#19 0x00007f00e6aa66aa in g_main_context_dispatch (context=context@entry=0x750600) at ././glib/gmain.c:3856
#20 0x00007f00e6aa6a60 in g_main_context_iterate (context=0x750600, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ././glib/gmain.c:3929
#21 0x00007f00e6aa6d82 in g_main_loop_run (loop=0x795c60) at ././glib/gmain.c:4125
#22 0x00007f00e787ccc5 in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#23 0x00000000004036c0 in main ()
Examining frame #14 (closed):
(gdb) print *local
$1 = {parent_instance = {g_type_instance = {g_class = 0x7f00d000be10},
ref_count = 2, qdata = 0x0},
filename = 0xc5dfa0 "/var/tmp/0QI_OkZMk7/linux-3.16.36/debian/linux-image-3.16.0-4-m68k.templates"}
So gnome-settings-daemon is cleaning up /var/tmp. That is a useful function, but this behaviour is not documented anywhere. It is not normal for /var/tmp to be cleaned up automatically so this is a bug.
Now, why is it crashing? The log format string (which never actually makes it into the log - that seems a bug in _g_log_abort()) - is "Creating pipes for GWakeup: %s". The only likely reason for pipe creation failure is a limit on number of FDs. Sure enough, this process has 1024 FDs open, mostly for directories under /var/tmp. That looks like an FD leak.
Ben.
====
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=851498
Version: 3.22.x