Fix scoped type variables for expression type signatures
[ghc-hetmet.git] / rts / MBlock.c
index 15a4d23..85fe02d 100644 (file)
@@ -337,20 +337,19 @@ allocNew(nat n) {
     if(rec->base==0) {
         stgFree((void*)rec);
         rec=0;
-        errorBelch(
-            "getMBlocks: VirtualAlloc MEM_RESERVE %d blocks failed with: %ld\n"
-            , n, GetLastError());
+        sysErrorBelch(
+            "getMBlocks: VirtualAlloc MEM_RESERVE %d blocks failed", n);
     } else {
-        if(allocs==0) {
-            allocs=rec;
-            rec->next=0;
-        } else {
-            alloc_rec* it;
-            it=allocs;
-            for(; it->next!=0 && it->next->base<rec->base; it=it->next) ;
-            rec->next=it->next;
-            it->next=rec;
-        }
+               alloc_rec temp;
+               temp.base=0; temp.size=0; temp.next=allocs;
+
+        alloc_rec* it;
+        it=&temp;
+        for(; it->next!=0 && it->next->base<rec->base; it=it->next) ;
+        rec->next=it->next;
+        it->next=rec;
+
+               allocs=temp.next;
         debugTrace(DEBUG_gc, "allocated %d megablock(s) at 0x%x",n,(nat)rec->base);
     }
     return rec;
@@ -409,7 +408,7 @@ findFreeBlocks(nat n) {
         if( (((unsigned long)it->base) & MBLOCK_MASK) == 0) { /* MBlock aligned */
             ret = (void*)it->base;
             if(it->size==required_size) {
-                prev->next=0;
+                prev->next=it->next;
                 stgFree(it);
             } else {
                 it->base += required_size;
@@ -443,7 +442,7 @@ static void
 commitBlocks(char* base, int size) {
     alloc_rec* it;
     it=allocs;
-    for( ; it!=0 && (it->base+it->size)<base; it=it->next ) {}
+    for( ; it!=0 && (it->base+it->size)<=base; it=it->next ) {}
     for( ; it!=0 && size>0; it=it->next ) {
         int size_delta;
         void* temp;
@@ -451,7 +450,7 @@ commitBlocks(char* base, int size) {
         if(size_delta>size) size_delta=size;
         temp = VirtualAlloc(base, size_delta, MEM_COMMIT, PAGE_READWRITE);
         if(temp==0) {
-            errorBelch("getMBlocks: VirtualAlloc MEM_COMMIT failed: %ld\n", GetLastError());
+            sysErrorBelch("getMBlocks: VirtualAlloc MEM_COMMIT failed");
            stg_exit(EXIT_FAILURE);
        }
         size-=size_delta;
@@ -515,7 +514,7 @@ freeAllMBlocks(void)
         it=allocs;
         for(; it!=0; ) {
             if(!VirtualFree((void*)it->base, 0, MEM_RELEASE)) {
-                errorBelch("freeAllMBlocks: VirtualFree MEM_RELEASE failed with %ld", GetLastError());
+                sysErrorBelch("freeAllMBlocks: VirtualFree MEM_RELEASE failed");
                stg_exit(EXIT_FAILURE);
             }
             next = it->next;