Author: Remi Meier <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit