Gtk-CRITICAL assertion failed (file dialogs?)
- From: Roger Davis <rbd soest hawaii edu>
- To: gtk-app-devel-list gnome org
- Subject: Gtk-CRITICAL assertion failed (file dialogs?)
- Date: Tue, 18 Mar 2014 08:49:04 -1000 (HST)
Hi all,
I have several gtk+3 apps that are all suffering from what appears to be 
the same bug -- at seemingly random times, and often when a program is 
quiescent (i.e., no user activity of any kind), I see the message
(myapp:13754): Gtk-CRITICAL **: gtk_tree_model_filter_get_path: assertion 
'GTK_TREE_MODEL_FILTER (model)->priv->stamp == iter->stamp' failed
and the program dumps core shortly thereafter. I have included a sample 
stack backtrace at the end of this message. I am currently running the 
latest, or at least extremely recent, releases of all pertinent packages 
(e.g., gtk+ 3.10.5, glib 2.38.2) on 64-bit CentOS 6.5 machines. The 
problem has persisted over the last year across various releases of 
gtk+3/glib. This bug is not directly reproducible in any program, i.e., 
there is no known exact sequence of user actions that is guaranteed to 
trigger it, although one pattern of activity is under greater suspicion 
than others. (See further below.)
I've researched the above error message but not found much that would seem 
to apply to me. Supposedly this happens when one uses an iterator that is 
not matched to one's data type or some such -- not having much clue as to 
what this means, I'm certainly not doing it explicitly. I also see posts 
about this from people who are using GtkTree... objects, but I am not 
using any such objects directly, although it's possible that the gtk+ 
objects I *am* using are built from GtkTree... components.
Because this is happening in multiple applications, I think it unlikely 
that I have a single coding error that is stepping on gtk+3 data 
structures. It seems more likely that (1) I am using some gtk+3 object in 
a way which is not safe, or (2) there's simply a bug in gtk+3 and friends. 
I'm pursuing #1 at the moment, although there's certainly no shortage of 
reports of this problem in various bits of software around the web.
I have three particular questions about this:
(1) If I have any suspicions about my own gtk+3 usage, they are centered 
on file chooser dialogs. The beginnings of this problem roughly correlate 
with a time when I replaced code that required typing filenames into a 
text entry field by code that popped up a file chooser dialog to aid in 
filling that field. File chooser dialogs are obviously composite widgets 
including a list structure that may well be built from one or more 
instances of GtkTree... elements somehow. (Can anyone confirm or deny?) 
The documentation examples generally show such dialogs being created, run, 
and immediately destroyed. Trying to be thrifty, my code creates a single 
file chooser dialog at program start time, then runs that same dialog 
repeatedly as necessary without ever destroying it, rather than going 
through the same create->run->destroy cycle every time I need to prompt 
for a filename. Is there a problem with my approach? Is there anything I 
need to do to anesthetize a dialog when I'm not using it so that it's not 
doing some useless and dangerous background tree traversal or something 
when it shouldn't? These errors pretty much never occur when I'm actively 
using a dialog (either displaying it or dismissing it) but rather when 
there's nothing particularly interesting going on after some significant 
amount of time has passed since dismissing the dialog.
(2) If my file chooser dialog usage as described above is not problematic, 
can anyone tell me what other commonly used gtk+3 widgets are implemented 
using GtkTree... components and may be the cause of these errors? My GUIs 
are generally drawing areas embedded within a scrolled window, using popup 
menus, dialogs and other dialog-like windows which contain customized 
arrangements of various text, radiobutton, etc., items arranged within a 
layout. (All of my dialog and dialog-like windows are objects that, like 
my file chooser dialogs, are permanent, i.e., created only once at program 
startup time, then shown and hidden repeatedly as needed depending upon 
user activity.) I'm using cairo for all of my imaging into the drawing 
areas but do not suspect any cairo involvement in this mess as I do not 
use it to overdraw anything other than drawing area surfaces.
(3) Finally, can anyone recommend a way to debug this? As I have said, 
there is no way to reliably trigger the bug. Last Friday I banged on the 
program for an entire day, making heavy use of file chooser dialogs, and 
all was fine. Monday morning I came into the office to find that the bug 
crashed my program over the weekend when there had been absolutely zero 
user interaction with the entire window system for a period of over 12 
hours. I'm thinking the only useful thing I could do would be to fill up 
the gtk3/glib library code with printf statements, but I really don't know 
what areas of these libraries to target. What I need to do first is 
discover which of my gtk+ objects is responsible for initiating the call 
sequence that results in the assertion failure.
Any suggestions on how to fix this incredibly frustrating problem would be 
most gratefully welcomed!
Roger Davis
Univ. of Hawaii
PS: Stack backtrace follows. This is typical, although not always the 
same, for this problem. There is pretty much always a call to some kind of 
gtk_tree_*_row_deleted() function somewhere on the stack. Here it is:
#0  0x00007f07545c1a0b in find_root (seq=0x2201480) at gsequence.c:1570
#1  node_get_length (seq=0x2201480) at gsequence.c:1791
#2  g_sequence_get_length (seq=0x2201480) at gsequence.c:1256
#3  0x00007f0756130d73 in gtk_tree_model_filter_row_deleted 
(c_model=<value optimized out>, c_path=0x2201480, data=0x7f07340034b0) at 
gtktreemodelfilter.c:2592
#4  0x00007f075489bdc2 in g_closure_invoke (closure=0x237ee60, 
return_value=0x0, n_param_values=2, param_values=0x7fffb5a1eca0, 
invocation_hint=<value optimized out>) at gclosure.c:777
#5  0x00007f07548b2341 in signal_emit_unlocked_R (node=<value optimized 
out>, detail=0, instance=0x22b4d80, emission_return=0x0, 
instance_and_params=0x7fffb5a1eca0) at gsignal.c:3586
#6  0x00007f07548b38df in g_signal_emit_valist (instance=<value optimized 
out>, signal_id=<value optimized out>, detail=0, var_args=<value optimized 
out>) at gsignal.c:3330
#7  0x00007f07548b3ce3 in g_signal_emit (instance=<value optimized out>, 
signal_id=<value optimized out>, detail=<value optimized out>) at 
gsignal.c:3386
#8  0x00007f0755fe1c6d in emit_row_deleted_for_row (model=0x22b4d80, 
row=<value optimized out>) at gtkfilesystemmodel.c:331
#9  0x00007f0755fe3df5 in remove_file (monitor=<value optimized out>, 
file=<value optimized out>, other_file=<value optimized out>, type=<value 
optimized out>, model=0x22b4d80) at gtkfilesystemmodel.c:1912
#10 gtk_file_system_model_monitor_change (monitor=<value optimized out>, 
file=<value optimized out>, other_file=<value optimized out>, type=<value 
optimized out>, model=0x22b4d80) at gtkfilesystemmodel.c:1257
#11 0x00007f0752d7d45c in ffi_call_unix64 () at ../src/x86/unix64.S:75
#12 0x00007f0752d7cbf3 in ffi_call (cif=<value optimized out>, 
fn=0x7f0755fe3bf0 <gtk_file_system_model_monitor_change>, rvalue=<value 
optimized out>, avalue=0x7fffb5a1f1b0) at ../src/x86/ffi64.c:492
#13 0x00007f0754899d48 in g_cclosure_marshal_generic_va 
(closure=0x23393d0, return_value=0x0, instance=0x2355a00, args_list=<value 
optimized out>, marshal_data=0x7f0755fe3bf0, n_params=3, 
param_types=0xcc5f70) at gclosure.c:1550
#14 0x00007f075489bc0a in _g_closure_invoke_va (closure=0x23393d0, 
return_value=0x0, instance=0x2355a00, args=0x7fffb5a1f610, n_params=3, 
param_types=<value optimized out>) at gclosure.c:840
#15 0x00007f07548b2f2d in g_signal_emit_valist (instance=<value optimized 
out>, signal_id=<value optimized out>, detail=0, var_args=<value optimized 
out>) at gsignal.c:3238
#16 0x00007f07548b3ce3 in g_signal_emit (instance=<value optimized out>, 
signal_id=<value optimized out>, detail=<value optimized out>) at 
gsignal.c:3386
#17 0x00007f07556b15d1 in emit_cb (data=0x2355a00) at gfilemonitor.c:392
#18 0x00007f07545a9593 in g_main_dispatch (context=0x9e14c0) at 
gmain.c:3066
#19 g_main_context_dispatch (context=0x9e14c0) at gmain.c:3642
#20 0x00007f07545ab5f8 in g_main_context_iterate (context=0x9e14c0, 
block=1, dispatch=1, self=<value optimized out>) at gmain.c:3713
#21 0x00007f07545ac625 in g_main_loop_run (loop=0x20107a0) at gmain.c:3907
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]