Author: Remi Meier <[email protected]>
Branch:
Changeset: r504:61deaab3f5f5
Date: 2013-08-30 15:33 +0200
http://bitbucket.org/pypy/stmgc/changeset/61deaab3f5f5/
Log: in don't use zones when not _GC_MEMPROTECT
diff --git a/c4/dbgmem.c b/c4/dbgmem.c
--- a/c4/dbgmem.c
+++ b/c4/dbgmem.c
@@ -32,8 +32,9 @@
void *stm_malloc(size_t sz)
{
size_t real_sz = sz + sizeof(size_t);
+
+#ifdef _GC_MEMPROTECT
pthread_mutex_lock(&malloc_mutex);
-
if (zone_current == NULL) {
zone_start = mmap(NULL, MMAP_TOTAL, PROT_NONE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
@@ -43,11 +44,8 @@
zone_current = zone_start;
zone_end = zone_start + MMAP_TOTAL;
assert((MMAP_TOTAL % PAGE_SIZE) == 0);
-#ifdef _GC_MEMPROTECT
+
_stm_dbgmem(zone_start, MMAP_TOTAL, PROT_NONE);
-#else
- _stm_dbgmem(zone_start, MMAP_TOTAL, PROT_READ | PROT_WRITE);
-#endif
}
size_t nb_pages = (real_sz + PAGE_SIZE - 1) / PAGE_SIZE + 1;
@@ -61,16 +59,18 @@
result += (-real_sz) & (PAGE_SIZE-1);
assert(((intptr_t)(result + real_sz) & (PAGE_SIZE-1)) == 0);
-#ifdef _GC_MEMPROTECT
_stm_dbgmem(result, real_sz, PROT_READ | PROT_WRITE);
-#endif
long i, base = (result - zone_start) / PAGE_SIZE;
for (i = 0; i < nb_pages; i++)
accessible_pages[base + i] = 42;
+ assert(((intptr_t)(result + real_sz) & (PAGE_SIZE-1)) == 0);
+#else
+ char * result = malloc(real_sz);
+#endif
+
dprintf(("stm_malloc(%zu): %p\n", sz, result));
- assert(((intptr_t)(result + real_sz) & (PAGE_SIZE-1)) == 0);
memset(result, 0xBB, real_sz);
result += sizeof(size_t);
@@ -87,6 +87,8 @@
void *real_p = p - sizeof(size_t);
assert(real_sz > 0);
+ memset(real_p, 0xDD, real_sz);
+#ifdef _GC_MEMPROTECT
assert(((intptr_t)((char *)real_p + real_sz) & (PAGE_SIZE-1)) == 0);
size_t nb_pages = (real_sz + PAGE_SIZE - 1) / PAGE_SIZE + 1;
@@ -96,8 +98,7 @@
assert(accessible_pages[base + i] == 42);
accessible_pages[base + i] = -1;
}
- memset(real_p, 0xDD, real_sz);
-#ifdef _GC_MEMPROTECT
+
_stm_dbgmem(real_p, real_sz, PROT_NONE);
#endif
}
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit