Zeitgeist plugin crash fixes, blocking issues and code correctness
- Fixes a crash when the plugin is toggled in quick succession in Peas Gtk.
- Code now checks for async call results and adds cancellation support.
- Make connection to zeitgiest daemon as async, so rhythmbox doesn't hang if there are dbus connection issues.
- Report event submission stats on plugin exit.
- 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 ()