Makefile
[cacao.git] / mm / heap.old.c
index c2d7630441091e3ef85bea27acd05af968ba72bf..9a9d8a1b6346bb80a18cf91abd8789d019c8946d 100644 (file)
@@ -419,6 +419,7 @@ static void mark (heapblock *obj)
        if ( isbitclear(startbits, blocknum) ) return;
        if ( isbitset(markbits, blocknum) ) return;
 
+       fprintf(stderr, "mark: marking object at 0x%lx\n", obj);
        setbit (markbits, blocknum);
        
        if ( isbitclear(referencebits, blocknum) ) return;
@@ -495,6 +496,8 @@ static void markstack ()                   /* schani */
 #else
     void **top_of_stack = &dummy;
 
+       fprintf(stderr, "marking stack\n");
+
     if (top_of_stack > bottom_of_stack)
         markreferences(bottom_of_stack, top_of_stack);
     else
@@ -595,6 +598,7 @@ static void heap_docollect ()
                /* Alle vom Stack referenzierten Objekte markieren */
        asm_dumpregistersandcall (markstack);
 
+       fprintf(stderr, "marking references\n");
                /* Alle von globalen Variablen erreichbaren Objekte markieren */
        p = chain_first (allglobalreferences);
        while (p) {
@@ -632,12 +636,24 @@ static void heap_docollect ()
                        /* Ende des freien Bereiches suchen */          
                freeend = findnextsetbit (markbits, topofheap, freestart+1);
 
+#if 0
+               if (freeend==topofheap) {
+                       topofheap = freestart;
+                       heapfreemem += (freeend-freestart);
+                       goto freememfinished;
+               } else {
+                       fprintf(stderr, "%lx -- %lx\n", heap + freestart, heap + freeend);
+#endif
+
                        /* Freien Bereich in Freispeicherliste einh"angen */
-               memlist_addrange (freestart, freeend-freestart);
+                       memlist_addrange (freestart, freeend-freestart);
 
                        /* Menge des freien Speichers mitnotieren */
-               heapfreemem += (freeend-freestart);
+                       heapfreemem += (freeend-freestart);
+#if 0
                }
+#endif
+       }
 
        freememfinished:
 
@@ -823,6 +839,10 @@ void *heap_allocate (u4 bytelength, bool references, methodinfo *finalizer)
        u4 freestart,freelength;
        u4 length = ALIGN(bytelength, BLOCKSIZE) / BLOCKSIZE;
        
+       //      fprintf(stderr, "heap_allocate: 0x%lx (%ld) requested, 0x%lx (%ld) aligned\n", bytelength, bytelength, length * BLOCKSIZE, length * BLOCKSIZE);
+
+       //      heap_docollect();
+
        intsDisable();                        /* schani */
 
        memlist_getsuitable (&freestart, &freelength, length);