On Mon, Jun 4, 2012 at 2:18 AM, Akash Rawal <argmlac@xxxxxxxxx> wrote: > Hi all, > > I have a GHashTable related question. > > I am writing a volume monitor for GIO. > > I have a code like this: > > 186 void pup_conv_mgr_close_all_convs(PupConvMgr *cmgr, > PupConvCloseFlags flags) > 187 { > 188 GHashTableIter iter; > 189 PupConv *oneconv; > 190 g_hash_table_iter_init(&iter, cmgr->self_convs); > 191 while(g_hash_table_iter_next(&iter, NULL, (gpointer > *)&oneconv)) > 192 { > 193 pup_conv_close(oneconv, flags | PUP_CONV_NOREMOVE); > 194 if (flags& PUP_CONV_FREE) > 195 g_hash_table_iter_remove(&iter); > 196 } > 197 g_hash_table_iter_init(&iter, cmgr->other_convs); > 198 while(g_hash_table_iter_next(&iter, NULL, (gpointer > *)&oneconv)) > 199 { > 200 pup_conv_close(oneconv, flags | PUP_CONV_NOREMOVE); > 201 if (flags& PUP_CONV_FREE) > 202 g_hash_table_iter_remove(&iter); > 203 } > 204 } > > Exactly at line 198 I get a warning like: > > (pup-volume-monitor:4276): GLib-CRITICAL **: g_hash_table_iter_next: > assertion `ri->version == ri->hash_table->version' failed When you do g_hash_table_iter_remove, it increments a field on the iterator and the hash table to ensure that the two don't get out of sync. Removing while iterating is sort of a difficult problem. Are you removing something else from the same hash table in your destroy function that you passed to g_hash_table_init ? > Although nothing worse happens, but I am curious to know why I get this. > > Thanks in advance. > > _______________________________________________ > gtk-list mailing list > gtk-list@xxxxxxxxx > https://mail.gnome.org/mailman/listinfo/gtk-list -- Jasper _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx https://mail.gnome.org/mailman/listinfo/gtk-list