]> 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 07:03:29 +0000 (11:03 +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 5eb4d140f1a54dbd96e606b6d81624728ab4251a..e48f6608ba92b5085ef976d7f95c262840b6a41f 100644 (file)
@@ -177,12 +177,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;
@@ -198,12 +198,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. */