Make foreach() safe against removal of the _current_ element. While this
authorOwen Taylor <otaylor@redhat.com>
Thu, 3 May 2001 10:47:32 +0000 (10:47 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Thu, 3 May 2001 10:47:32 +0000 (10:47 +0000)
Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>

* g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
foreach() safe against removal of the _current_ element. While
this could break some code, the new behavior is consistent with
the rest of GLib/GTK+ and probably is what people expect in most
cases. (Suggested by Paul Kuykendall, #50071)

13 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/Changes-2.0.txt
glib/glist.c
glib/gslist.c
glist.c
gslist.c

index f12a6e696915f6215d582517a5cb9a100627d2db..a0a1eed202dcd0dec69193040a18ebc135fc7b22 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+       foreach() safe against removal of the _current_ element. While
+       this could break some code, the new behavior is consistent with
+       the rest of GLib/GTK+ and probably is what people expect in most
+       cases. (Suggested by Paul Kuykendall, #50071)
+
 Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
index f12a6e696915f6215d582517a5cb9a100627d2db..a0a1eed202dcd0dec69193040a18ebc135fc7b22 100644 (file)
@@ -1,3 +1,11 @@
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+       foreach() safe against removal of the _current_ element. While
+       this could break some code, the new behavior is consistent with
+       the rest of GLib/GTK+ and probably is what people expect in most
+       cases. (Suggested by Paul Kuykendall, #50071)
+
 Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
index f12a6e696915f6215d582517a5cb9a100627d2db..a0a1eed202dcd0dec69193040a18ebc135fc7b22 100644 (file)
@@ -1,3 +1,11 @@
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+       foreach() safe against removal of the _current_ element. While
+       this could break some code, the new behavior is consistent with
+       the rest of GLib/GTK+ and probably is what people expect in most
+       cases. (Suggested by Paul Kuykendall, #50071)
+
 Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
index f12a6e696915f6215d582517a5cb9a100627d2db..a0a1eed202dcd0dec69193040a18ebc135fc7b22 100644 (file)
@@ -1,3 +1,11 @@
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+       foreach() safe against removal of the _current_ element. While
+       this could break some code, the new behavior is consistent with
+       the rest of GLib/GTK+ and probably is what people expect in most
+       cases. (Suggested by Paul Kuykendall, #50071)
+
 Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
index f12a6e696915f6215d582517a5cb9a100627d2db..a0a1eed202dcd0dec69193040a18ebc135fc7b22 100644 (file)
@@ -1,3 +1,11 @@
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+       foreach() safe against removal of the _current_ element. While
+       this could break some code, the new behavior is consistent with
+       the rest of GLib/GTK+ and probably is what people expect in most
+       cases. (Suggested by Paul Kuykendall, #50071)
+
 Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
index f12a6e696915f6215d582517a5cb9a100627d2db..a0a1eed202dcd0dec69193040a18ebc135fc7b22 100644 (file)
@@ -1,3 +1,11 @@
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+       foreach() safe against removal of the _current_ element. While
+       this could break some code, the new behavior is consistent with
+       the rest of GLib/GTK+ and probably is what people expect in most
+       cases. (Suggested by Paul Kuykendall, #50071)
+
 Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
index f12a6e696915f6215d582517a5cb9a100627d2db..a0a1eed202dcd0dec69193040a18ebc135fc7b22 100644 (file)
@@ -1,3 +1,11 @@
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+       foreach() safe against removal of the _current_ element. While
+       this could break some code, the new behavior is consistent with
+       the rest of GLib/GTK+ and probably is what people expect in most
+       cases. (Suggested by Paul Kuykendall, #50071)
+
 Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
index f12a6e696915f6215d582517a5cb9a100627d2db..a0a1eed202dcd0dec69193040a18ebc135fc7b22 100644 (file)
@@ -1,3 +1,11 @@
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+       foreach() safe against removal of the _current_ element. While
+       this could break some code, the new behavior is consistent with
+       the rest of GLib/GTK+ and probably is what people expect in most
+       cases. (Suggested by Paul Kuykendall, #50071)
+
 Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
index 8bf2819badd20b2b2a5fda22b2f53db87423ed43..13f79b3db8d9a787d1dad84989dba603b050b95c 100644 (file)
      in to the ->dispatch() vfunc.
 
   To go along with this change, the vtable for GIOChannel has changed and
-  add_watch() has been replaced by create_watch().
\ No newline at end of file
+  add_watch() has been replaced by create_watch().
+
+* g_list_foreach() and g_slist_foreach() have been changed so they
+  are now safe against removal of the current item, not the next item.
+
+  It's not recommended to mutate the list in the callback to these
+  functions in any case.
\ No newline at end of file
index 3518221fbdc3db597be13147ed4071717ff101cd..6d9f0ddee91c10a228fe75d3b88bcf6e02784df3 100644 (file)
@@ -617,8 +617,9 @@ g_list_foreach (GList        *list,
 {
   while (list)
     {
+      GList *next = list->next;
       (*func) (list->data, user_data);
-      list = list->next;
+      list = next;
     }
 }
 
index 5577fb3265d9f35ba3994c7842e10084c0df2484..4dafb98be3b21cb3df735187fc6f1b54523fabfe 100644 (file)
@@ -589,8 +589,9 @@ g_slist_foreach (GSList   *list,
 {
   while (list)
     {
+      GSList *next = list->next;
       (*func) (list->data, user_data);
-      list = list->next;
+      list = next;
     }
 }
 
diff --git a/glist.c b/glist.c
index 3518221fbdc3db597be13147ed4071717ff101cd..6d9f0ddee91c10a228fe75d3b88bcf6e02784df3 100644 (file)
--- a/glist.c
+++ b/glist.c
@@ -617,8 +617,9 @@ g_list_foreach (GList        *list,
 {
   while (list)
     {
+      GList *next = list->next;
       (*func) (list->data, user_data);
-      list = list->next;
+      list = next;
     }
 }
 
index 5577fb3265d9f35ba3994c7842e10084c0df2484..4dafb98be3b21cb3df735187fc6f1b54523fabfe 100644 (file)
--- a/gslist.c
+++ b/gslist.c
@@ -589,8 +589,9 @@ g_slist_foreach (GSList   *list,
 {
   while (list)
     {
+      GSList *next = list->next;
       (*func) (list->data, user_data);
-      list = list->next;
+      list = next;
     }
 }