Christopher Maynard wrote:
> Jaap Keuter <jaap.keu...@...> 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)?
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <[email protected]>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:[email protected]?subject=unsubscribe

Reply via email to