]> granicus.if.org Git - gc/commitdiff
Fix GC_root_size update in GC_add_roots_inner (Win32)
authorIvan Maidanski <ivmai@mail.ru>
Fri, 10 Feb 2012 04:26:40 +0000 (08:26 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 10 Feb 2012 06:57:10 +0000 (10:57 +0400)
* mark_rts.c (GC_add_roots_inner): Fix update of GC_root_size value
for Win32 (adjust GC_root_size before altering r_start/r_end).

mark_rts.c

index a57ac3e9600568469a8a8708abad771e7d526d29..3799a43ef3906004d4c6bcbabc781bc5318614b2 100644 (file)
@@ -189,12 +189,12 @@ void GC_add_roots_inner(ptr_t b, ptr_t e, GC_bool tmp)
             old = GC_static_roots + i;
             if (b <= old -> r_end && e >= old -> r_start) {
                 if (b < old -> r_start) {
+                    GC_root_size += old->r_start - b;
                     old -> r_start = b;
-                    GC_root_size += (old -> r_start - b);
                 }
                 if (e > old -> r_end) {
+                    GC_root_size += e - old->r_end;
                     old -> r_end = e;
-                    GC_root_size += (e - old -> r_end);
                 }
                 old -> r_tmp &= tmp;
                 break;
@@ -210,12 +210,12 @@ void GC_add_roots_inner(ptr_t b, ptr_t e, GC_bool tmp)
               e = other -> r_end;
               if (b <= old -> r_end && e >= old -> r_start) {
                 if (b < old -> r_start) {
+                    GC_root_size += old->r_start - b;
                     old -> r_start = b;
-                    GC_root_size += (old -> r_start - b);
                 }
                 if (e > old -> r_end) {
+                    GC_root_size += e - old->r_end;
                     old -> r_end = e;
-                    GC_root_size += (e - old -> r_end);
                 }
                 old -> r_tmp &= other -> r_tmp;
                 /* Delete this entry. */