Assertion causing segfault setting individual as favourite
I'm getting a 100% reproducible segfault calling Individual.change_is_favourite(true)
. This happens after obtaining an Individual from the default aggregator, reading some properties off of it, then a while later calling that method in response to user input. No changes have been made to the individual in the intervening time, and the crash doesn't occur when calling that method with false
.
The default backend is (presumably) an EDS Google address book, configured via GOA, since that is what shows up as selected in Contacts. Folks 0.11.4 from the current Ubuntu Disco beta.
Assertion and full output stack:
![???] 13:10:48 0.003636 folks: folks_small_set_get: assertion '(guint) i < self->items->len' failed
Thread 1 "geary" received signal SIGTRAP, Trace/breakpoint trap.
0x00007ffff7d40955 in _g_log_abort (breakpoint=1) at ../../../glib/gmessages.c:554
554 ../../../glib/gmessages.c: No such file or directory.
(gdb) bt full
#0 0x00007ffff7d40955 in _g_log_abort (breakpoint=1) at ../../../glib/gmessages.c:554
debugger_present = 1
#1 0x00007ffff7d41c5d in g_logv
(log_domain=0x7ffff7f8ff32 "folks", log_level=G_LOG_LEVEL_CRITICAL, format=<optimised out>, args=args@entry=0x7fffffffd7d0)
at ../../../glib/gmessages.c:1371
domain = 0x0
data = 0x0
depth = 1
log_func = 0x55555559454b <_geary_logging_default_handler_glog_func>
domain_fatal_mask = <optimised out>
masquerade_fatal = 0
test_level = 10
was_fatal = 0
was_recursion = 0
msg = 0x555557c1cad0 "folks_small_set_get: assertion '(guint) i < self->items->len' failed"
msg_alloc = 0x555557c1cad0 "folks_small_set_get: assertion '(guint) i < self->items->len' failed"
i = 3
#2 0x00007ffff7d41e2f in g_log
(log_domain=log_domain@entry=0x7ffff7f8ff32 "folks", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7ffff7d9177c "%s: assertion '%s' failed") at ../../../glib/gmessages.c:1413
args = {{gp_offset = 40, fp_offset = 48, overflow_arg_area = 0x7fffffffd8b0, reg_save_area = 0x7fffffffd7f0}}
#3 0x00007ffff7d42629 in g_return_if_fail_warning
(log_domain=log_domain@entry=0x7ffff7f8ff32 "folks", pretty_function=pretty_function@entry=0x7ffff7f8eef0 <__FUNCTION__.30365> "folks_small_set_get", expression=<optimised out>) at ../../../glib/gmessages.c:2767
#4 0x00007ffff7f63c58 in folks_small_set_get (self=<optimised out>, i=<optimised out>) at ../folks/small-set-internal.h:85
__FUNCTION__ = "folks_small_set_get"
__FUNCTION__ = "folks_small_set_get"
__FUNCTION__ = "folks_individual_real_change_is_favourite_co"
#5 0x00007ffff7f63c58 in folks_small_set_get (i=<optimised out>, self=<optimised out>) at ../folks/small-set-internal.h:80
__FUNCTION__ = "folks_small_set_get"
__FUNCTION__ = "folks_individual_real_change_is_favourite_co"
#6 0x00007ffff7f63c58 in folks_individual_real_change_is_favourite_co (_data_=0x55555a3340c0) at individual.c:3340
__FUNCTION__ = "folks_individual_real_change_is_favourite_co"
#7 0x00007fffe45d0382 in edsf_persona_real_change_is_favourite_async_ready_wrapper
(source_object=0x555556683420 [EdsfPersona], res=0x7fff50034010, user_data=user_data@entry=0x55555a3340c0) at edsf-persona.c:4137
_task_data_ = 0x55555a295800
#8 0x00007ffff78ba059 in g_task_return_now (task=0x7fff50034010 [GTask]) at ../../../gio/gtask.c:1209
#9 0x00007ffff78bab73 in g_task_return (task=0x7fff50034010 [GTask], type=<optimised out>) at ../../../gio/gtask.c:1278
source = 0x7fffd8013cf0
#10 0x00007ffff78bb0ec in g_task_return (type=G_TASK_RETURN_SUCCESS, task=<optimised out>) at ../../../gio/gtask.c:1678
__FUNCTION__ = "g_task_return_pointer"
#11 0x00007ffff78bb0ec in g_task_return_pointer (task=<optimised out>, result=<optimised out>, result_destroy=<optimised out>)
at ../../../gio/gtask.c:1683
__FUNCTION__ = "g_task_return_pointer"
#12 0x00007fffe45d23ce in edsf_persona_real_change_is_favourite_co (_data_=0x55555a295800) at edsf-persona.c:4241
__FUNCTION__ = "edsf_persona_real_change_is_favourite_co"
#13 0x00007fffe45dc732 in _edsf_persona_store_set_is_favourite_async_ready_wrapper
--Type <RET> for more, q to quit, c to continue without paging--
(source_object=0x5555563416c0 [EdsfPersonaStore], res=0x55555a1bf630, user_data=user_data@entry=0x55555a295800) at edsf-persona-store.c:6168
_task_data_ = 0x55555a281460
#14 0x00007ffff78ba059 in g_task_return_now (task=0x55555a1bf630 [GTask]) at ../../../gio/gtask.c:1209
#15 0x00007ffff78bab73 in g_task_return (task=0x55555a1bf630 [GTask], type=<optimised out>) at ../../../gio/gtask.c:1278
source = 0x7fffd8013cf0
#16 0x00007ffff78bb0ec in g_task_return (type=G_TASK_RETURN_SUCCESS, task=<optimised out>) at ../../../gio/gtask.c:1678
__FUNCTION__ = "g_task_return_pointer"
#17 0x00007ffff78bb0ec in g_task_return_pointer (task=<optimised out>, result=<optimised out>, result_destroy=<optimised out>)
at ../../../gio/gtask.c:1683
__FUNCTION__ = "g_task_return_pointer"
#18 0x00007fffe45e9a6e in _edsf_persona_store_set_is_favourite_co (_data_=0x55555a2814f8) at edsf-persona-store.c:6293
__FUNCTION__ = "_edsf_persona_store_set_is_favourite_co"
#19 0x00007fffe45dc5b2 in _edsf_persona_store_commit_modified_property_async_ready_wrapper
(source_object=0x5555563416c0 [EdsfPersonaStore], res=0x55555a28ad50, user_data=user_data@entry=0x55555a281460) at edsf-persona-store.c:4748
_task_data_ = 0x55555a335000
#20 0x00007ffff78ba059 in g_task_return_now (task=0x55555a28ad50 [GTask]) at ../../../gio/gtask.c:1209
#21 0x00007ffff78bab73 in g_task_return (task=0x55555a28ad50 [GTask], type=<optimised out>) at ../../../gio/gtask.c:1278
source = 0x7fffd8013cf0
#22 0x00007ffff78bb0ec in g_task_return (type=G_TASK_RETURN_SUCCESS, task=<optimised out>) at ../../../gio/gtask.c:1678
__FUNCTION__ = "g_task_return_pointer"
#23 0x00007ffff78bb0ec in g_task_return_pointer (task=<optimised out>, result=<optimised out>, result_destroy=<optimised out>)
at ../../../gio/gtask.c:1683
__FUNCTION__ = "g_task_return_pointer"
#24 0x00007fffe45e1039 in _edsf_persona_store_commit_modified_property_co (_data_=0x55555a335000) at edsf-persona-store.c:5070
__FUNCTION__ = "_edsf_persona_store_commit_modified_property_co"
#25 0x00007ffff78a6662 in g_simple_async_result_complete (simple=0x7fff4c109ec0 [GSimpleAsyncResult]) at ../../../gio/gsimpleasyncresult.c:802
current_source = <optimised out>
current_context = <optimised out>
__FUNCTION__ = "g_simple_async_result_complete"
#26 0x00007ffff78a6709 in complete_in_idle_cb_for_thread (_data=0x55555a33ded0) at ../../../gio/gsimpleasyncresult.c:873
data = 0x55555a33ded0
simple = 0x7fff4c109ec0 [GSimpleAsyncResult]
#27 0x00007ffff7d3a958 in g_main_dispatch (context=0x555555c00710) at ../../../glib/gmain.c:3189
dispatch = 0x7ffff7d37280 <g_idle_dispatch>
prev_source = 0x0
was_in_call = 0
user_data = 0x55555a33ded0
callback = 0x7ffff78a66f0 <complete_in_idle_cb_for_thread>
cb_funcs = <optimised out>
cb_data = 0x7fffd801d580
need_destroy = <optimised out>
source = 0x7fffd8013cf0
current = 0x555555c20c80
i = 1
__FUNCTION__ = "g_main_dispatch"
#28 0x00007ffff7d3a958 in g_main_context_dispatch (context=context@entry=0x555555c00710) at ../../../glib/gmain.c:3854
#29 0x00007ffff7d3ad48 in g_main_context_iterate
--Type <RET> for more, q to quit, c to continue without paging--
(context=context@entry=0x555555c00710, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimised out>) at ../../../glib/gmain.c:3927
max_priority = 0
timeout = 0
some_ready = 1
nfds = <optimised out>
allocated_nfds = 9
fds = 0x55555a19a7b0
#30 0x00007ffff7d3addc in g_main_context_iteration (context=context@entry=0x555555c00710, may_block=may_block@entry=1) at ../../../glib/gmain.c:3988
retval = <optimised out>
#31 0x00007ffff78e68bd in g_application_run (application=0x555555bec1d0 [GearyApplication], argc=<optimised out>, argv=0x7fffffffddb8)
at ../../../gio/gapplication.c:2516
arguments = 0x555555beba40
status = 0
context = 0x555555c00710
acquired_context = 1
__FUNCTION__ = "g_application_run"
#32 0x0000555555593d0e in _vala_main (args=0x7fffffffddb8, args_length1=2) at ../src/client/application/main.vala:33
result = 0
app = 0x555555bec1d0 [GearyApplication]
_tmp0_ = 0x555555bec1d0 [GearyApplication]
ec = 0
#33 0x0000555555593d57 in main (argc=2, argv=0x7fffffffddb8) at ../src/client/application/main.vala:7
(gdb)
Assertions in production code are the blurst of times. :(