PatchSet 5176 
Date: 2004/09/16 23:19:23
Author: dalibor
Branch: HEAD
Tag: (none) 
Log:
Fixed freelist corruption when gc_block array is moved

2004-09-16  Noa Resare  <[EMAIL PROTECTED]>

        * kaffe/kaffevm/kaffe-gc/gc-mem.c (gc_block_alloc):
        Fix freelist corruption when the gc_block array is moved.

Members: 
        ChangeLog:1.2731->1.2732 
        kaffe/kaffevm/kaffe-gc/gc-mem.c:1.14->1.15 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2731 kaffe/ChangeLog:1.2732
--- kaffe/ChangeLog:1.2731      Thu Sep 16 21:01:49 2004
+++ kaffe/ChangeLog     Thu Sep 16 23:19:23 2004
@@ -1,3 +1,8 @@
+2004-09-16  Noa Resare  <[EMAIL PROTECTED]>
+
+       * kaffe/kaffevm/kaffe-gc/gc-mem.c (gc_block_alloc):
+        Fix freelist corruption when the gc_block array is moved.
+
 2004-09-16  Dalibor Topic  <[EMAIL PROTECTED]>
 
         * configure.ac:
Index: kaffe/kaffe/kaffevm/kaffe-gc/gc-mem.c
diff -u kaffe/kaffe/kaffevm/kaffe-gc/gc-mem.c:1.14 
kaffe/kaffe/kaffevm/kaffe-gc/gc-mem.c:1.15
--- kaffe/kaffe/kaffevm/kaffe-gc/gc-mem.c:1.14  Fri Sep  3 19:08:20 2004
+++ kaffe/kaffe/kaffevm/kaffe-gc/gc-mem.c       Thu Sep 16 23:19:26 2004
@@ -1039,6 +1039,19 @@
 #endif
 
 /*
+ * Determine if ptr points inside the array of gc_block structures.
+ *
+ * @param ptr the pointer to check for
+ * @param base a pointer to the start of the array
+ * @param count the number of elements in the array
+ */
+static int
+inside(void* ptr, gc_block* base, int count) {
+        return ((gc_block*)ptr >= base && (gc_block*)ptr < base + count);
+}
+
+
+/*
  * Allocate size bytes of heap memory, and return the corresponding
  * gc_block *.
  */
@@ -1132,6 +1145,8 @@
                            R(b[i].next);
                            R(b[i].pprev);
                            R(b[i].pnext);
+                            if (inside(b[i].free, (gc_block*)old_blocks, onb))
+                               R(b[i].free);
                          }
 
                        memset(b + onb, 0,

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to