ソースを参照

missed a few cases

David Rose 18 年 前
コミット
278e10d8ff
1 ファイル変更17 行追加1 行削除
  1. 17 1
      dtool/src/dtoolbase/dlmalloc_src.cxx

+ 17 - 1
dtool/src/dtoolbase/dlmalloc_src.cxx

@@ -1324,9 +1324,14 @@ static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
 #define DIRECT_MMAP(s)       CALL_MMAP(s)
 #define DIRECT_MMAP(s)       CALL_MMAP(s)
 #else /* WIN32 */
 #else /* WIN32 */
 
 
+static size_t win32_total_mmap = 0;
+
 /* Win32 MMAP via VirtualAlloc */
 /* Win32 MMAP via VirtualAlloc */
 static void* win32mmap(size_t size) {
 static void* win32mmap(size_t size) {
   void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
   void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
+  if (ptr != 0) {
+    win32_total_mmap += size;
+  }
   return (ptr != 0)? ptr: MFAIL;
   return (ptr != 0)? ptr: MFAIL;
 }
 }
 
 
@@ -1334,6 +1339,9 @@ static void* win32mmap(size_t size) {
 static void* win32direct_mmap(size_t size) {
 static void* win32direct_mmap(size_t size) {
   void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
   void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
                            PAGE_READWRITE);
                            PAGE_READWRITE);
+  if (ptr != 0) {
+    win32_total_mmap += size;
+  }
   return (ptr != 0)? ptr: MFAIL;
   return (ptr != 0)? ptr: MFAIL;
 }
 }
 
 
@@ -1351,6 +1359,7 @@ static int win32munmap(void* ptr, size_t size) {
       return -1;
       return -1;
     cptr += minfo.RegionSize;
     cptr += minfo.RegionSize;
     size -= minfo.RegionSize;
     size -= minfo.RegionSize;
+    win32_total_mmap -= minfo.RegionSize;
   }
   }
   return 0;
   return 0;
 }
 }
@@ -3134,6 +3143,7 @@ static void* mmap_alloc(mstate m, size_t nb) {
   if (mmsize > nb) {     /* Check for wrap around 0 */
   if (mmsize > nb) {     /* Check for wrap around 0 */
     char* mm = (char*)(DIRECT_MMAP(mmsize));
     char* mm = (char*)(DIRECT_MMAP(mmsize));
     if (mm != CMFAIL) {
     if (mm != CMFAIL) {
+      memory_hook->inc_heap(mmsize);
       size_t offset = align_offset(chunk2mem(mm));
       size_t offset = align_offset(chunk2mem(mm));
       size_t psize = mmsize - offset - MMAP_FOOT_PAD;
       size_t psize = mmsize - offset - MMAP_FOOT_PAD;
       mchunkptr p = (mchunkptr)(mm + offset);
       mchunkptr p = (mchunkptr)(mm + offset);
@@ -3172,6 +3182,8 @@ static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) {
     char* cp = (char*)CALL_MREMAP((char*)oldp - offset,
     char* cp = (char*)CALL_MREMAP((char*)oldp - offset,
                                   oldmmsize, newmmsize, 1);
                                   oldmmsize, newmmsize, 1);
     if (cp != CMFAIL) {
     if (cp != CMFAIL) {
+      memory_hook->dec_heap(oldsize);
+      memory_hook->inc_heap(nb);
       mchunkptr newp = (mchunkptr)(cp + offset);
       mchunkptr newp = (mchunkptr)(cp + offset);
       size_t psize = newmmsize - offset - MMAP_FOOT_PAD;
       size_t psize = newmmsize - offset - MMAP_FOOT_PAD;
       newp->head = (psize|CINUSE_BIT);
       newp->head = (psize|CINUSE_BIT);
@@ -3629,6 +3641,8 @@ static int sys_trim(mstate m, size_t pad) {
       m->trim_check = MAX_SIZE_T;
       m->trim_check = MAX_SIZE_T;
   }
   }
 
 
+  memory_hook->dec_heap(released);
+
   return (released != 0)? 1 : 0;
   return (released != 0)? 1 : 0;
 }
 }
 
 
@@ -4210,8 +4224,10 @@ void dlfree(void* mem) {
           if ((prevsize & IS_MMAPPED_BIT) != 0) {
           if ((prevsize & IS_MMAPPED_BIT) != 0) {
             prevsize &= ~IS_MMAPPED_BIT;
             prevsize &= ~IS_MMAPPED_BIT;
             psize += prevsize + MMAP_FOOT_PAD;
             psize += prevsize + MMAP_FOOT_PAD;
-            if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
+            if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) {
               fm->footprint -= psize;
               fm->footprint -= psize;
+              memory_hook->dec_heap(psize);
+            }
             goto postaction;
             goto postaction;
           }
           }
           else {
           else {