I'm catching a crash in gtktreelist with the latest candidate. This only seems to happen if I sort the upload pane by the status column. (I've tested a few different configs; it only happens this way. Doesn't happen when sorting by any of the other columns...) When it is set up this way, sooner or later, an upload removal will fail with the following message:
03/06/10 11:19:19 (WARNING): [PARQ UL] host <ip removed> (BearShare 4.2.7) re-requested "<name removed>" too soon (1138 secs early)
03/06/10 11:19:19 (WARNING): [PARQ UL] punishing <ip removed> (BearShare 4.2.7) for re-requesting "<name removed>" 1138 secs early
----Sent HTTP Status to 81.152.178.187:
HTTP/1.1 403 Retry-After not honoured; removed from PARQ queue
Server: gtk-gnutella/0.92u (05/06/2003; X11; FreeBSD 4.8-STABLE i386)
Connection: close
X-Token: PuZZX/JejIUpReqVwyzgJ/AbfQIntvvDo853; A6mQZg==
X-Live-Since: Tue, 10 Jun 2003 11:15:01 -1100
X-Gnutella-Content-URN: urn:sha1:IG7BQBUG5LVLKSPRARYISHAA54MPDUIZ
----
Cancelling upload for "<name removed>" from <ip removed> (BearShare 4.2.7): Retry-After not honoured; removed from PARQ queue
gtk-gnutella in free(): warning: chunk is already free
gtk-gnutella in free(): warning: chunk is already free
gtk-gnutella in free(): warning: chunk is already free
gtk-gnutella in free(): warning: junk pointer, too high to make sense
Segmentation fault (core dumped)
(I've only seen this happen such removals (punishing), but I assume this is because they are much more frequent than other removals.)
It seems to happen within 5-10 minutes of sorting the column. (To note, a number of succesful removals occur before the crash.)
Some background info: this is on bsd-stable (4.8) compiled with gcc 2.95.4, with no optimizations. As I mentioned in the title, this is a gtk2 build; gtk version is gtk-2.2.1_1. (This was recently upgraded, and might have something to do with this, though it's listed as "current stable.")
Here's a full bt:
(gdb) bt f
#0 0x2875a9d7 in g_mem_chunk_free () from /usr/local/lib/libglib-2.0.so.200
No symbol table info available.
#1 0x2833ca4f in _gtk_tree_data_list_free (list=0x8319d00,
column_headers=0x8756800) at gtktreedatalist.c:66
tmp = (GtkTreeDataList *) 0x8319d00
next = (GtkTreeDataList *) 0x832f600
i = 0
#2 0x28267f32 in gtk_list_store_remove_silently (list_store=0x8750840,
iter=0x8f73610, path=0x0) at gtkliststore.c:969
No locals.
#3 0x28268107 in gtk_list_store_remove (list_store=0x8750840, iter=0x8f73610)
at gtkliststore.c:1016
path = (GtkTreePath *) 0x0
next = (GSList *) 0x8cf6180
#4 0x80c1730 in list_store_remove_and_free_list (store=0x8750840,
to_remove=0x8a8cda0) at uploads_gui2.c:346
store = (GtkListStore *) 0x8750840
to_remove = (GSList *) 0x8a8cda0
sl = (GSList *) 0x8cf64d0
#5 0x80c1aa5 in uploads_gui_update_display (now=1055283235)
at uploads_gui2.c:448
last_update = 1055283235
model = (GtkTreeModel *) 0x8750840
iter = {stamp = 1137905863, user_data = 0x0, user_data2 = 0x0,
user_data3 = 0x0}
status = {status = GTA_UL_QUEUED, pos = 901078, bps = 1, avg_bps = 1,
last_update = 1055283340, parq_position = 1, parq_size = 11,
parq_lifetime = 149, parq_retry = 59, parq_queue_no = 3}
all_removed = 0
valid = 0
to_remove = (GSList *) 0x8a8cda0
#6 0x80af2d4 in gui_update_global () at gui.c:102
now = 1055283235
start_stamp = 1055208074
#7 0x80c63ab in main_gui_timer () at main_gui.c:682
No locals.
#8 0x80fa4db in main_timer (p=0x0) at main.c:269
now = 1055283235
#9 0x28756d04 in g_timeout_dispatch () from /usr/local/lib/libglib-2.0.so.200
No symbol table info available.
#10 0x287547fb in g_main_dispatch () from /usr/local/lib/libglib-2.0.so.200
No symbol table info available.
#11 0x287555cb in g_main_context_dispatch ()
from /usr/local/lib/libglib-2.0.so.200
No symbol table info available.
#12 0x28755996 in g_main_context_iterate ()
from /usr/local/lib/libglib-2.0.so.200
No symbol table info available.
#13 0x2875605b in g_main_loop_run () from /usr/local/lib/libglib-2.0.so.200
No symbol table info available.
#14 0x2826ca24 in gtk_main () at gtkmain.c:1092
tmp_list = (GList *) 0x0
functions = (GList *) 0x0
init = (GtkInitFunction *) 0x1
loop = (GMainLoop *) 0x88eb6f0
#15 0x80c62e3 in main_gui_run () at main_gui.c:650
coord = {2, 204, 1141, 586}
#16 0x80fa8bc in main (argc=1, argv=0xbfbff8f0, env=0xbfbff8f8) at main.c:463
argc = 1
argv = (gchar **) 0xbfbff8f0
i = 256
#17 0x80657d6 in _start ()
I'll hold on to the core, just ask if you need more info.
This is wierd...
While I was writing this, I decided to try sort_descending to see if that cleared up the problem, but I get a different error. (You remeber the weird idtable assert failure I wrote about a while ago, it's back... Most of that thread is at http://sourceforge.net/mailarchive/forum.php?thread_id=2403602&forum_id=5942 To note, that error occured before the recent gtk2 upgrade, though I'm not sure what the previous version was.)
A quick examination shows that valid is again at zero in uploads_gui_update_display, which is impossible. (Looking at the other bt, above, I see valid is also zero there too.)
After adding the g_assert(valid) in this function, as per christian's advice, a full bt shows valid = 1 for both situations. With sort descending, it looks similar to the previous crash where (id < tbl->size) failed, except that idtable_get_value now has no locals. With sort_ascending the error (the one I was originally writing about) has changed significantly with that assert; instead of doing what it did above at frame 5, here's the altered sequence:
the failed assert: g_assert(IS_ID_TAKEN(tbl, id)); idtable.c:257
(gdb) bt f
#0 0x28a12c84 in kill () from /usr/lib/libc.so.4
No symbol table info available.
#1 0x28a54212 in abort () from /usr/lib/libc.so.4
No symbol table info available.
#2 0x28794af9 in g_logv () from /usr/local/lib/libglib-2.0.so.200
No symbol table info available.
#3 0x28794ba9 in g_log () from /usr/local/lib/libglib-2.0.so.200
No symbol table info available.
#4 0x814c669 in idtable_get_value (tbl=0x8545080, id=2) at idtable.c:257
No locals.
#5 0x8123fa3 in upload_get_status (uh=2, si=0xbfbff620) at uploads.c:2593
u = (gnutella_upload_t *) 0xbfbff64c
now = 142138560
#6 0x80d7af4 in uploads_gui_update_display (now=1055294330) at uploads_gui2.c:437
data = (upload_row_data_t *) 0x894f040
last_update = 1055294330
model = (GtkTreeModel *) 0x878dcc0
iter = {stamp = 1742823740, user_data = 0x8b084c0, user_data2 = 0x0, user_data3 = 0x0}
status = {status = GTA_UL_QUEUED, pos = 0, bps = 1, avg_bps = 1, last_update = 1055294547, parq_position = 6,
parq_size = 59, parq_lifetime = 261, parq_retry = 171, parq_queue_no = 4}
all_removed = 0
valid = 1
to_remove = (GSList *) 0x8b07bc0
(An attempt to reproduce this error gave the same sequence as the first bt, with valid = 0; these may be distinct errors. To note, it passed g_assert(valid) in all cases.)
Let me know how I should proceed; I'm confused. And, sorry for making this so long, but I didn't want to leave out these latebreaking developements.
Peace, Clayton (riot138)
PS. you may have noticed me on #gtk-gnutella, feel free to contact me through there if you have any questions.
_________________________________________________________________
The new MSN 8: smart spam protection and 2 months FREE* http://join.msn.com/?page=features/junkmail
------------------------------------------------------- This SF.net email is sponsored by: Etnus, makers of TotalView, The best thread debugger on the planet. Designed with thread debugging features you've never dreamed of, try TotalView 6 free at www.etnus.com. _______________________________________________ Gtk-gnutella-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/gtk-gnutella-devel
