GNOME Bugzilla – Bug 698342
[abrt] Crash under e-cal-client.c:signal_closure_free
Last modified: 2015-11-19 07:29:41 UTC
Moving this from a downstream bug report: https://bugzilla.redhat.com/show_bug.cgi?id=953439 Version-Release number of selected component: evolution-3.8.0-1.fc19 Additional info: backtrace_rating: 4 cmdline: /usr/libexec/evolution/3.8/evolution-alarm-notify crash_function: g_weak_ref_set executable: /usr/libexec/evolution/3.8/evolution-alarm-notify kernel: 3.9.0-0.rc6.git2.3.fc19.x86_64 Core was generated by `/usr/libexec/evolution/3.8/evolution-alarm-notify'. Program terminated with signal 6, Aborted.
+ Trace 231815
Thread 1 (Thread 0x7f9c56b4fa40 (LWP 2212))
I get the same crash consistently in calendar factory with the below backtrace. I: a) delete my ~/local/cache/evolution/calendar b) start the calendar factory c) start: evolution -c mail d) open a meeting invitation, but close it in few seconds e) close evolution Wait few seconds till the factory finally realizes I cancelled the open of all (but those in alarm notification) calendars and it crashes, well, 3-4 out of 5 tries. The trick seems to be to have large CalDAV calendar, which is slower in updating. There are these critical warnings on console, just before the crash: (evolution-calendar-factory:6485): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJECT (object)' failed (evolution-calendar-factory:6485): GLib-GObject-WARNING **: instance of invalid non-instantiatable type `<invalid>' (evolution-calendar-factory:6485): GLib-GObject-CRITICAL **: g_signal_emit_by_name: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed (evolution-calendar-factory:6485): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed ** GLib-GObject:ERROR:gobject.c:4127:g_weak_ref_set: assertion failed: (weak_locations != NULL) The 'signal_closure' was created in a dedicated thread, but was going to be freed in the main thread. I see the associated CalDAV backend was freed (including finalize) before the signal_closure_free() was called. Maybe this is a fallout of the critical warnings, these are shown after the finalize of the backend. Maybe not.
+ Trace 232385
Thread 1 (Thread 0x7f0a903699c0 (LWP 6485))
I'd like to see backtraces for the warnings, or at least the first one.
Yeah, I thought so, and I managed to get the first one, it's at:
+ Trace 232386
Thread 1 (Thread 0x7ffff6e119c0 (LWP 8753))
Hmm, I can't explain that. The g_weak_ref_get() call should have returned NULL if the backend were already finalized. Some kind of corruption going on here, looks like. Valgrind might help track this down.
Probably unrelated, but I committed a change as suggested by desrt, to use g_weak_Ref_init/_clear() on structure-allocated GWekRef-s, the same was as it is done for GMutex and other similar structures. That is with commit 685c5cd on master (3.13.3+) and commit d6255ef evolution-data-server-3-12 (3.12.3+).
No duplicate for a long time, I'm closing this.