lock() causes segfaults
Submitted by Travis Reitter
Link to original bug (#664083)
Description
Sorry about the title - I can't tell exactly what's going wrong. Please fill in a better title if you understand what's going on.
I'm running into the following segfault for the given code. It's worked fine as recently as a few days ago for me (built against recent GLib, vala, etc.).
Suddenly the lock() call on line 102 causes a segfault within GLib at run time. The code below has not been changed for a long time.
The memory that the mutex points to looks suspicious. Also, lock() uses the deprecated GStaticRecMutex internally. With all the changes to how GLib deals with deprecated code, maybe that's caused the break.
=================================== Relevant code:
private bool _debug_output_enabled = true; public bool debug_output_enabled { get { // line 101 lock (this._debug_output_enabled) { return this._debug_output_enabled; } }
set
{
lock (this._debug_output_enabled)
{
this._debug_output_enabled = value;
}
}
}
===================================
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff5dca1eb in g_static_rec_mutex_get_rec_mutex_impl (
mutex=<optimized out>) at deprecated/gthread-deprecated.c:672
672 result = g_atomic_pointer_get (&mutex->mutex.mutex);
(gdb) bt
#0 0x00007ffff5dca1eb in g_static_rec_mutex_get_rec_mutex_impl (
mutex=<optimized out>) at deprecated/gthread-deprecated.c:672
#1 0x00007ffff5dca509 in g_static_rec_mutex_lock (mutex=0xaaaaaaaaaaaaab52)
at deprecated/gthread-deprecated.c:707
#2 0x00007ffff798dc29 in folks_debug_get_debug_output_enabled (self=0x6570c0)
at /home/treitter/collabora/folks/folks/debug.vala:102
#3 0x00007ffff798dc9d in _folks_debug_log_handler_cb (
message=0x6b02a0 "individual.vala:939: Destroying Individual '313c2544050b57180743877efa3433afe3cf41a1': 0x676150", log_levels=G_LOG_LEVEL_DEBUG,
log_domain=0x7ffff7996f5e "folks", self=<optimized out>)
at /home/treitter/collabora/folks/folks/debug.vala:153
#4 __folks_debug_log_handler_cb_glog_func (log_domain=<optimized out>,
log_levels=G_LOG_LEVEL_DEBUG,
message=0x6b02a0 "individual.vala:939: Destroying Individual '313c2544050b57180743877efa3433afe3cf41a1': 0x676150", self=<optimized out>)
at /home/treitter/collabora/folks/folks/debug.vala:172
#5 0x00007ffff5dfc0cc in g_logv (log_domain=0x7ffff7996f5e "folks",
log_level=<optimized out>,
format=0x7ffff799bbb0 "individual.vala:939: Destroying Individual '%s': %p", args1=0x7fffffffd9b8) at gmessages.c:732
#6 0x00007ffff5dfc2a2 in g_log (log_domain=<optimized out>,
log_level=<optimized out>, format=<optimized out>) at gmessages.c:791
#7 0x00007ffff797fd24 in folks_individual_finalize (obj=0x676150)
at /home/treitter/collabora/folks/folks/individual.vala:939
#8 0x00007ffff64e6c80 in g_object_unref (_object=0x676150) at gobject.c:2746
#9 0x00007ffff6a7c897 in gee_hash_map_real_clear (base=0x673830)
at hashmap.c:1156
#10 0x00007ffff6a7d0d4 in gee_hash_map_finalize (obj=0x673830)
at hashmap.c:3006
#11 0x00007ffff64e6c80 in g_object_unref (_object=0x673830) at gobject.c:2746
#12 0x00007ffff6a8b1fe in gee_read_only_map_finalize (obj=0x640520)
at readonlymap.c:951
#13 0x00007ffff64e6c80 in g_object_unref (_object=0x640520) at gobject.c:2746
#14 0x00007ffff798a1c2 in folks_individual_aggregator_finalize (obj=0x67b820)
at /home/treitter/collabora/folks/folks/individual-aggregator.vala:155
#15 0x00007ffff64e6c80 in g_object_unref (_object=0x67b820) at gobject.c:2746
#16 0x0000000000405018 in search_view_tests_real_tear_down (base=0x61e000)
at /home/treitter/collabora/folks/tests/eds/search-view.vala:56
#17 0x00007ffff5e151b5 in test_case_run (tc=0x61d030) at gtestutils.c:1605
#18 g_test_run_suite_internal (suite=0x61b440, path=0x7ffff5e878de "")
at gtestutils.c:1648
#19 0x00007ffff5e152d6 in g_test_run_suite_internal (suite=<optimized out>,
path=0x7ffff5e878de "") at gtestutils.c:1659
#20 0x00007ffff5e1562b in g_test_run_suite (suite=0x61b420)
at gtestutils.c:1704
#21 0x0000000000408487 in _vala_main (args=0x7fffffffdf28, args_length1=1)
at /home/treitter/collabora/folks/tests/eds/search-view.vala:446
#22 0x00007ffff582aead in __libc_start_main ()
from /lib/x86_64-linux-gnu/libc.so.6
#23 0x0000000000404e99 in _start ()
(gdb) frame 1
#1 0x00007ffff5dca509 in g_static_rec_mutex_lock (mutex=0xaaaaaaaaaaaaab52)
at deprecated/gthread-deprecated.c:707
707 rm = g_static_rec_mutex_get_rec_mutex_impl (mutex);
(gdb) p mutex
$1 = (GStaticRecMutex *) 0xaaaaaaaaaaaaab52
(gdb) p &mutex
Address requested for identifier "mutex" which is in register $rbx
(gdb) p &mutex->mutex
$2 = (GStaticMutex *) 0xaaaaaaaaaaaaab52
(gdb) p &mutex->mutex.mutex
$3 = (GMutex **) 0xaaaaaaaaaaaaab52