udisks icon indicating copy to clipboard operation
udisks copied to clipboard

Fix modules unload on daemon quit

Open tbzatek opened this issue 5 years ago • 2 comments

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

tbzatek avatar Oct 27 '20 15:10 tbzatek

(perhaps introduce udisks_provider_stop() and call it from main.c before the daemon object gets unreff'ed?)

tbzatek avatar Oct 27 '20 15:10 tbzatek

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.

tbzatek avatar Oct 27 '20 15:10 tbzatek