udisks
udisks copied to clipboard
Fix modules unload on daemon quit
Fix this!
(lt-udisksd:12313): GLib-GObject-CRITICAL **: 16:14:15.547: g_object_ref: assertion 'old_val > 0' failed
(lt-udisksd:12313): udisks-CRITICAL **: 16:14:15.547: udisks_daemon_get_mount_monitor: assertion 'UDISKS_IS_DAEMON (daemon)' failed
(lt-udisksd:12313): GLib-GObject-WARNING **: 16:14:15.547: invalid (NULL) pointer instance
(lt-udisksd:12313): GLib-GObject-CRITICAL **: 16:14:15.547: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
(lt-udisksd:12313): GLib-GObject-WARNING **: 16:14:15.547: invalid (NULL) pointer instance
(lt-udisksd:12313): GLib-GObject-CRITICAL **: 16:14:15.547: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
(lt-udisksd:12313): udisks-CRITICAL **: 16:14:15.547: udisks_daemon_get_object_manager: assertion 'UDISKS_IS_DAEMON (daemon)' failed
Segmentation fault (core dumped)
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f9138002c6d in g_dbus_object_manager_get_objects () from /lib64/libgio-2.0.so.0
#0 0x00007f9138002c6d in g_dbus_object_manager_get_objects () at /lib64/libgio-2.0.so.0
#1 0x00000000004240ea in find_drive (object_manager=0x0, block_device=0x17bfdc0, out_drive=0x7fff9d172d38) at udiskslinuxblock.c:244
#2 0x00000000004263e6 in udisks_linux_block_update (block=0x17a8f70, object=0x2364a40) at udiskslinuxblock.c:1123
#3 0x0000000000422134 in block_device_update (object=0x2364a40, uevent_action=0x467aa5 "add", _iface=0x17a8f70) at udiskslinuxblockobject.c:495
#4 0x000000000042207e in update_iface (object=0x2364a40, uevent_action=0x467aa5 "add", has_func=0x4220c9 <block_device_check>, connect_func=0x4220d8 <block_device_connect>, update_func=0x4220e3 <block_device_update>, skeleton_type=Python Exception <class 'gdb.error'> No type named TypeNode.:
, _interface_pointer=0x2364a90) at udiskslinuxblockobject.c:469
#5 0x0000000000422c66 in udisks_linux_block_object_uevent (object=0x2364a40, action=0x467aa5 "add", device=0x0) at udiskslinuxblockobject.c:878
#6 0x000000000042179b in udisks_linux_block_object_constructed (_object=0x2364a40) at udiskslinuxblockobject.c:242
#7 0x00007f9137e922e7 in g_object_new_internal () at /lib64/libgobject-2.0.so.0
#8 0x00007f9137e93fac in g_object_new_valist () at /lib64/libgobject-2.0.so.0
#9 0x00007f9137e9430d in g_object_new () at /lib64/libgobject-2.0.so.0
#10 0x0000000000421a9c in udisks_linux_block_object_new (daemon=0x174c700, device=0x7f9110012b00) at udiskslinuxblockobject.c:325
#11 0x00000000004203f9 in handle_block_uevent_for_block (provider=0x1777870, action=0x4670fd "add", device=0x7f9110012b00) at udiskslinuxprovider.c:1239
#12 0x0000000000420970 in handle_block_uevent (provider=0x1777870, action=0x4670fd "add", device=0x7f9110012b00) at udiskslinuxprovider.c:1410
#13 0x0000000000420a32 in udisks_linux_provider_handle_uevent (provider=0x1777870, action=0x4670fd "add", device=0x7f9110012b00) at udiskslinuxprovider.c:1440
#14 0x000000000041e97b in do_coldplug (provider=0x1777870, udisks_devices=0x17ca2c0 = {...}) at udiskslinuxprovider.c:527
#15 0x000000000041eb94 in ensure_modules (provider=0x1777870) at udiskslinuxprovider.c:594
#16 0x00007f9137776af0 in ffi_call_unix64 () at ../src/x86/unix64.S:76
#17 0x00007f91377762ab in ffi_call (cif=<optimized out>, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>) at ../src/x86/ffi64.c:525
#18 0x00007f9137e8d38d in g_cclosure_marshal_generic () at /lib64/libgobject-2.0.so.0
#19 0x00007f9137e8c88a in g_closure_invoke () at /lib64/libgobject-2.0.so.0
#20 0x00007f9137e9f423 in signal_emit_unlocked_R.isra.0 () at /lib64/libgobject-2.0.so.0
#21 0x00007f9137ea5af9 in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
#22 0x00007f9137ea5c63 in g_signal_emit () at /lib64/libgobject-2.0.so.0
#23 0x00000000004622b9 in udisks_module_manager_unload_modules (manager=0x1749040) at udisksmodulemanager.c:493
#24 0x0000000000419ed0 in udisks_daemon_finalize (object=0x174c700) at udisksdaemon.c:131
#25 0x00007f9137e91d00 in g_object_unref () at /lib64/libgobject-2.0.so.0
#26 0x0000000000419d1d in main (argc=1, argv=0x7fff9d173d18) at main.c:192
(perhaps introduce udisks_provider_stop() and call it from main.c before the daemon object gets unreff'ed?)
On the other hand it's probably not necessary to go through proper cleaning and coldplug as done in udiskslinuxprovider.c:ensure_modules() and only destroy all UDisksModule objects to clean any locks, etc. This would hopefully solve the stray calls to xfs_info alike as a possible result of coldplug internal uevent.