Christopher Maynard wrote:
Jaap Keuter <jaap.keuter@...> writes:
From the top of my head there's an environment variable which can be set on
running glib based apps that cause
these apps to stop when they hit these. Running in a debugger allows you to to
backtrace to the source.
Thanks Jaap. From http://library.gnome.org/devel/glib/2.12/glib-running.html, I
found that if I set G_DEBUG=fatal_criticals that tshark will abort at the first
occurrence.
With that set, I ran tshark in gdb and got the backtrace, which follows. I've
been trying to figure out what's going wrong, stepping through the code in gdb,
but haven't been able to draw any conclusions yet.
(gdb) bt
#0 0x0000003e13430015 in raise () from /lib64/libc.so.6
#1 0x0000003e13431980 in abort () from /lib64/libc.so.6
#2 0x0000003e19435050 in g_logv () from /lib64/libglib-2.0.so.0
#3 0x0000003e194350d3 in g_log () from /lib64/libglib-2.0.so.0
#4 0x0000003e1944704b in g_string_insert_c () from /lib64/libglib-2.0.so.0
#5 0x00002aaaabc5780a in dfilter_macro_apply (text=<value optimized out>,
depth=0, error=0x632d00) at /usr/include/glib-2.0/glib/gstring.h:131
Looks like your glib is attempting to inline g_string_append_c() (this
is from a RH5 system):
120 #ifdef G_CAN_INLINE
121 static inline GString*
122 g_string_append_c_inline (GString *gstring,
123 gchar c)
124 {
125 if (gstring->len + 1 < gstring->allocated_len)
126 {
127 gstring->str[gstring->len++] = c;
128 gstring->str[gstring->len] = 0;
129 }
130 else
131 g_string_insert_c (gstring, -1, c); <<<< here
132 return gstring;
133 }
134 #define g_string_append_c(gstr,c) g_string_append_c_inline (gstr, c)
135 #endif /* G_CAN_INLINE */
But then when it gets into g_string_insert_c() it doesn't think that -1
is actually a -1 (this code is from 2.12.latest via the git web interface):
GString*
g_string_insert_c (GString *string,
gssize pos,
gchar c)
{
g_return_val_if_fail (string != NULL, NULL);
g_string_maybe_expand (string, 1);
if (pos < 0)
pos = string->len; <<<< should have gone down this path
else
g_return_val_if_fail (pos <= string->len, string); <<< but your error indicates it came here
Not sure what's going on there. Reinstall glib2? Forcibly undef
G_CAN_INLINE (as an experiment at least)?