Skip to content

Zeitgeist plugin crash fixes, blocking issues and code correctness

crvi requested to merge crvi/rhythmbox:zeitgeist-plugin-fixes into master
  1. Fixes a crash when the plugin is toggled in quick succession in Peas Gtk.
  2. Code now checks for async call results and adds cancellation support.
  3. Make connection to zeitgiest daemon as async, so rhythmbox doesn't hang if there are dbus connection issues.
  4. Report event submission stats on plugin exit.
  5. Code refactoring and cleanup

Crash backtrace:

Toggle plugin in Peas Gtk quickly to reproduce crash.

(gdb) bt
#0  fast_validate (str=<optimized out>) at ../../../glib/gutf8.c:1498
#1  g_utf8_validate (max_len=<optimized out>, end=<optimized out>, str=<optimized out>) at ../../../glib/gutf8.c:1681
#2  g_utf8_validate (str=str@entry=0xe8204589007d8b48 <error: Cannot access memory at address 0xe8204589007d8b48>, max_len=max_len@entry=-1, end=end@entry=0x0) at ../../../glib/gutf8.c:1671
#3  0x00007fd12bd580d7 in g_variant_new_string (string=0xe8204589007d8b48 <error: Cannot access memory at address 0xe8204589007d8b48>) at ../../../glib/gvariant.c:1262
#4  0x00007fd12bd5beb8 in g_variant_valist_new_nnp (str=0x7ffd4916bcc8, ptr=0xe8204589007d8b48) at ../../../glib/gvariant.c:4792
#5  0x00007fd12bd5d301 in g_variant_valist_new_leaf (app=0x7ffd4916bcf0, str=0x7ffd4916bcc8) at ../../../glib/gvariant.c:4987
#6  g_variant_valist_new (str=str@entry=0x7ffd4916bcc8, app=app@entry=0x7ffd4916bcf0) at ../../../glib/gvariant.c:5169
#7  0x00007fd12bd5d662 in g_variant_new_va (format_string=<optimized out>, endptr=0x0, app=0x7ffd4916bcf0) at ../../../glib/gvariant.c:5397
#8  0x00007fd12bd5dbbd in g_variant_builder_add (builder=builder@entry=0x564162c1f0f0, format_string=format_string@entry=0x7fd109852db6 "s") at ../../../glib/gvariant.c:5554
#9  0x00007fd10982e007 in zeitgeist_event_to_variant (self=0x7fd1040051c0) at event.c:1001
#10 0x00007fd10982fd25 in zeitgeist_events_to_variant (events=0x7fd104001c80) at event.c:2046
#11 0x00007fd10981a154 in zeitgeist_data_source_registry_register_data_source_co (_data_=0x7fd0dc007170) at data-source-registry.c:1872
#12 0x00007fd12b2d3cc9 in g_task_return_now (task=0x564162bf8400 [GTask]) at ../../../gio/gtask.c:1214
#13 0x00007fd12b2d480d in g_task_return (task=0x564162bf8400 [GTask], type=<optimized out>) at ../../../gio/gtask.c:1283
#14 0x00007fd12b2d4e2c in g_task_return (type=G_TASK_RETURN_SUCCESS, task=<optimized out>) at ../../../gio/gtask.c:1686
#15 g_task_return_pointer (task=<optimized out>, result=<optimized out>, result_destroy=<optimized out>) at ../../../gio/gtask.c:1691
#16 0x0000564162c1f1f0 in  ()
#17 0x0000564162c70620 in  ()
#18 0x0000564161f311e0 in  ()
#19 0x00007fd109823c51 in zeitgeist_queued_proxy_wrapper_process_queued_methods (self=self@entry=0x7fd104004b30 [ZeitgeistDataSourceRegistry]) at queued-proxy-wrapper.c:300
#20 0x00007fd109823db4 in zeitgeist_queued_proxy_wrapper_proxy_acquired (self=self@entry=0x7fd104004b30 [ZeitgeistDataSourceRegistry], proxy=proxy@entry=0x564162c1f1f0 [ZeitgeistRemoteRegistryProxy]) at queued-proxy-wrapper.c:247
#21 0x00007fd1098197d2 in __lambda4_ (obj=<optimized out>, res=<optimized out>, self=0x7fd104004b30 [ZeitgeistDataSourceRegistry]) at data-source-registry.c:1330
#22 ___lambda4__gasync_ready_callback (source_object=<optimized out>, res=<optimized out>, self=self@entry=0x7fd104004b30) at data-source-registry.c:1362
#23 0x00007fd12b2d3cc9 in g_task_return_now (task=0x564162b65980 [GTask]) at ../../../gio/gtask.c:1214
#24 0x00007fd12b2d480d in g_task_return (task=0x564162b65980 [GTask], type=<optimized out>) at ../../../gio/gtask.c:1283
#25 0x00007fd12b2d512e in g_task_return (type=G_TASK_RETURN_SUCCESS, task=<optimized out>) at ../../../gio/gtask.c:1799
#26 g_task_return_boolean (task=<optimized out>, result=<optimized out>) at ../../../gio/gtask.c:1803
#27 0x0000000000000000 in  ()
Edited by crvi

Merge request reports