Author: Remi Meier <remi.me...@inf.ethz.ch>
Branch: 
Changeset: r1635:19500805ccb8
Date: 2015-02-18 15:23 +0100
http://bitbucket.org/pypy/stmgc/changeset/19500805ccb8/

Log:    possibly fix a memory leak

diff --git a/c8/stm/gcpage.c b/c8/stm/gcpage.c
--- a/c8/stm/gcpage.c
+++ b/c8/stm/gcpage.c
@@ -62,6 +62,10 @@
                  size, (char*)(addr - stm_object_pages),
                  (uintptr_t)(addr - stm_object_pages) / 4096UL));
 
+        /* set stm_flags to 0 in seg0 so that major gc will see them
+           as not visited during sweeping */
+        ((struct object_s*)addr)->stm_flags = 0;
+
         return (stm_char*)(addr - stm_object_pages);
     }
 
@@ -89,6 +93,8 @@
              size, (char*)(addr - stm_object_pages),
              (uintptr_t)(addr - stm_object_pages) / 4096UL));
 
+    ((struct object_s*)addr)->stm_flags = 0;
+
     spinlock_release(lock_growth_large);
     return (stm_char*)(addr - stm_object_pages);
 }
diff --git a/c8/stm/smallmalloc.c b/c8/stm/smallmalloc.c
--- a/c8/stm/smallmalloc.c
+++ b/c8/stm/smallmalloc.c
@@ -175,13 +175,17 @@
 
     increment_total_allocated(size);
 
-    if (UNLIKELY(result == NULL))
+    if (UNLIKELY(result == NULL)) {
+        char *addr = _allocate_small_slowpath(size);
+        ((struct object_s*)addr)->stm_flags = 0;
         return (stm_char*)
-            (_allocate_small_slowpath(size) - stm_object_pages);
+            (addr - stm_object_pages);
+    }
 
     *fl = result->next;
     /* dprintf(("allocate_outside_nursery_small(%lu): %p\n", */
     /*          size, (char*)((char *)result - stm_object_pages))); */
+    ((struct object_s*)result)->stm_flags = 0;
     return (stm_char*)
         ((char *)result - stm_object_pages);
 }
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to