After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 623933 - Crash under ESourceList::conf_changed_callback
Crash under ESourceList::conf_changed_callback
Status: RESOLVED FIXED
Product: evolution-data-server
Classification: Platform
Component: Calendar
2.32.x (obsolete)
Other Linux
: Normal major
: ---
Assigned To: evolution-calendar-maintainers
Evolution QA team
: 513031 624132 634665 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2010-07-09 10:49 UTC by Akhil Laddha
Modified: 2013-09-14 16:54 UTC
See Also:
GNOME target: ---
GNOME version: 2.29/2.30


Attachments
eds patch (2.23 KB, patch)
2011-01-27 12:35 UTC, Milan Crha
committed Details | Review

Description Akhil Laddha 2010-07-09 10:49:20 UTC
evolution 2.31.5

I have mapi account enabled. I am running e-calendar-factory and e-addressbook-factory in separate terminals. I have selected itip message. I go to edit -> preference and disable account, some how e-calendar-factory exits. Though e-addressbook-factory and evolution are running.

Same happens when i try with groupwise account configured.

Expected : e-calendar-factory shouldn't exit.

(e-calendar-factory:15464): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
[Thread 0xb2fffb70 (LWP 15520) exited]

Thread 3074942656 (LWP 15464)

  • #0 g_logv
    at gmessages.c line 431
  • #1 g_log
    at gmessages.c line 569
  • #2 g_return_if_fail_warning
  • #3 g_value_get_object
    at gobject.c line 3016
  • #4 g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 638
  • #5 g_closure_invoke
    at gclosure.c line 767
  • #6 signal_emit_unlocked_R
    at gsignal.c line 3253
  • #7 g_signal_emit_valist
    at gsignal.c line 2984
  • #8 g_signal_emit
    at gsignal.c line 3041
  • #9 load_from_gconf
    at e-source-list.c line 149
  • #10 conf_changed_callback
    at e-source-list.c line 221
  • #11 notify_listeners_callback
    at gconf-client.c line 2444
  • #12 notify_listener_list
    at gconf-listeners.c line 590
  • #13 ltable_notify
    at gconf-listeners.c line 656
  • #14 gconf_listeners_notify
    at gconf-listeners.c line 185
  • #15 notify_one_entry
    at gconf-client.c line 2469
  • #16 gconf_client_flush_notifies
    at gconf-client.c line 2509
  • #17 notify_idle_callback
    at gconf-client.c line 2403
  • #18 g_idle_dispatch
    at gmain.c line 4149
  • #19 g_main_dispatch
    at gmain.c line 2044
  • #20 g_main_context_dispatch
    at gmain.c line 2597
  • #21 g_main_context_iterate
    at gmain.c line 2675
  • #22 g_main_loop_run
    at gmain.c line 2883
  • #23 main
    at e-data-cal-factory.c line 755
  • #0 g_logv
    at gmessages.c line 431
  • #1 g_log
    at gmessages.c line 569
  • #2 g_return_if_fail_warning
  • #3 e_source_group_peek_sources
    at e-source-group.c line 633
  • #4 source_group_removed_cb
    at e-cal-backend-contacts.c line 407
  • #5 g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 638
  • #6 g_closure_invoke
    at gclosure.c line 767
  • #7 signal_emit_unlocked_R
    at gsignal.c line 3253
  • #8 g_signal_emit_valist
    at gsignal.c line 2984
  • #9 g_signal_emit
    at gsignal.c line 3041
  • #10 load_from_gconf
    at e-source-list.c line 149
  • #11 conf_changed_callback
    at e-source-list.c line 221
  • #12 notify_listeners_callback
    at gconf-client.c line 2444
  • #13 notify_listener_list
    at gconf-listeners.c line 590
  • #14 ltable_notify
    at gconf-listeners.c line 656
  • #15 gconf_listeners_notify
    at gconf-listeners.c line 185
  • #16 notify_one_entry
    at gconf-client.c line 2469
  • #17 gconf_client_flush_notifies
    at gconf-client.c line 2509
  • #18 notify_idle_callback
    at gconf-client.c line 2403
  • #19 g_idle_dispatch
    at gmain.c line 4149
  • #20 g_main_dispatch
    at gmain.c line 2044
  • #21 g_main_context_dispatch
    at gmain.c line 2597
  • #22 g_main_context_iterate
    at gmain.c line 2675
  • #23 g_main_loop_run
    at gmain.c line 2883
  • #24 main
    at e-data-cal-factory.c line 755
Continuing.

(e-calendar-factory:15464): e-data-server-CRITICAL **: e_source_group_peek_sources: assertion `E_IS_SOURCE_GROUP (group)' failed
Bye.
[Thread 0xb27feb70 (LWP 15508) exited]
[Thread 0xb3987b70 (LWP 15505) exited]
[Thread 0xb4188b70 (LWP 15503) exited]

Program exited normally.
Comment 1 Matthew Barnes 2010-08-30 12:34:51 UTC
This might have something to do with it:
http://git.gnome.org/browse/evolution-data-server/commit/?id=1c0ae704c7ffc58768553fef7bd88e25191cf836

The ESourceList signals for added or removed source groups were registered improperly.  Can you retest with this change?
Comment 2 Matthew Barnes 2010-08-30 18:31:18 UTC
*** Bug 624132 has been marked as a duplicate of this bug. ***
Comment 3 Akhil Laddha 2010-08-31 04:57:05 UTC
I can still reproduce with steps mentioned in bug description.

When i disable mapi account, i see these two warnings on e-calendar-factory terminal

(e-calendar-factory:8378): GLib-GObject-CRITICAL **: g_value_get_object: assertion `G_VALUE_HOLDS_OBJECT (value)' failed

(e-calendar-factory:8378): e-data-server-CRITICAL **: e_source_group_peek_sources: assertion `E_IS_SOURCE_GROUP (group)' failed

at the same time, i see below debug message on evolution terminal.

(evolution:8506): libecal-DEBUG: GDBus connection is closed, remote peer vanished

gdb traces of e-calendar-factory

(gdb) bt
  • #0 g_logv
    at gmessages.c line 430
  • #1 g_log
    at gmessages.c line 568
  • #2 g_return_if_fail_warning
  • #3 g_value_get_object
    at gobject.c line 3015
  • #4 g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 638
  • #5 g_closure_invoke
    at gclosure.c line 766
  • #6 signal_emit_unlocked_R
    at gsignal.c line 3252
  • #7 g_signal_emit_valist
    at gsignal.c line 2983
  • #8 g_signal_emit
    at gsignal.c line 3040
  • #9 load_from_gconf
    at e-source-list.c line 149
  • #10 conf_changed_callback
    at e-source-list.c line 221
  • #11 notify_listeners_callback
    at gconf-client.c line 2444
  • #12 notify_listener_list
    at gconf-listeners.c line 590
  • #13 ltable_notify
    at gconf-listeners.c line 656
  • #14 gconf_listeners_notify
    at gconf-listeners.c line 185
  • #15 notify_one_entry
    at gconf-client.c line 2469
  • #16 gconf_client_flush_notifies
    at gconf-client.c line 2509
  • #17 notify_idle_callback
    at gconf-client.c line 2403
  • #18 g_idle_dispatch
    at gmain.c line 4224
  • #19 g_main_dispatch
    at gmain.c line 2119
  • #20 g_main_context_dispatch
    at gmain.c line 2672
  • #21 g_main_context_iterate
    at gmain.c line 2750
  • #22 g_main_loop_run
    at gmain.c line 2958
  • #23 main
    at e-data-cal-factory.c line 889
  • #0 g_logv
    at gmessages.c line 430
  • #1 g_log
    at gmessages.c line 568
  • #2 g_return_if_fail_warning
  • #3 e_source_group_peek_sources
    at e-source-group.c line 651
  • #4 source_group_removed_cb
    at e-cal-backend-contacts.c line 409
  • #5 g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 638
  • #6 g_closure_invoke
    at gclosure.c line 766
  • #7 signal_emit_unlocked_R
    at gsignal.c line 3252
  • #8 g_signal_emit_valist
    at gsignal.c line 2983
  • #9 g_signal_emit
    at gsignal.c line 3040
  • #10 load_from_gconf
    at e-source-list.c line 149
  • #11 conf_changed_callback
    at e-source-list.c line 221
  • #12 notify_listeners_callback
    at gconf-client.c line 2444
  • #13 notify_listener_list
    at gconf-listeners.c line 590
  • #14 ltable_notify
    at gconf-listeners.c line 656
  • #15 gconf_listeners_notify
    at gconf-listeners.c line 185
  • #16 notify_one_entry
    at gconf-client.c line 2469
  • #17 gconf_client_flush_notifies
    at gconf-client.c line 2509
  • #18 notify_idle_callback
    at gconf-client.c line 2403
  • #19 g_idle_dispatch
    at gmain.c line 4224
  • #20 g_main_dispatch
    at gmain.c line 2119
  • #21 g_main_context_dispatch
    at gmain.c line 2672
  • #22 g_main_context_iterate
    at gmain.c line 2750
  • #23 g_main_loop_run
    at gmain.c line 2958
  • #24 main
    at e-data-cal-factory.c line 889
Continuing.

(e-calendar-factory:8498): e-data-server-CRITICAL **: e_source_group_peek_sources: assertion `E_IS_SOURCE_GROUP (group)' failed
Bye.
[Thread 0xb1cfeb70 (LWP 8535) exited]
[Thread 0xb14fdb70 (LWP 8536) exited]
[Thread 0xb38fdb70 (LWP 8545) exited]
[Thread 0xb0cfcb70 (LWP 8537) exited]
[Thread 0xb24ffb70 (LWP 8534) exited]
[Thread 0xb48ffb70 (LWP 8502) exited]

Program exited normally.
Comment 4 Milan Crha 2011-01-27 12:11:26 UTC
*** Bug 634665 has been marked as a duplicate of this bug. ***
Comment 5 Milan Crha 2011-01-27 12:35:21 UTC
Created attachment 179430 [details] [review]
eds patch

for evolution-data-server;

I cannot reproduce exactly this, but I saw something very close to it. The issue seems to be that the GConf receives notifications on idle, and the notification routine can take some time, depending on its listeners, so a change in a separate thread can then also unref the ESourceList, while the main thread is processing the GConf change signal, causing access of already freed memory. I cannot think of anything better that this change right now.
Comment 6 Milan Crha 2011-01-27 12:36:39 UTC
Created commit 07b4da9 in eds master (2.91.6+)
Comment 7 Milan Crha 2011-03-16 12:25:12 UTC
*** Bug 513031 has been marked as a duplicate of this bug. ***