Clean bugfix for gc-bug.
authorschani <none@none>
Thu, 18 Nov 1999 18:30:16 +0000 (18:30 +0000)
committerschani <none@none>
Thu, 18 Nov 1999 18:30:16 +0000 (18:30 +0000)
mm/heap2.c

index aee5d7d6ac7a9ba642a3d2c031c0d95adfc492b9..f99b6812ffda471386ce908702b69eb552422c98 100644 (file)
@@ -858,7 +858,7 @@ void gc_mark_stack (void)
 #ifdef USE_THREADS 
     thread *aThread;
        
-       if (currentThread == NULL) {
+       if (currentThread == NULL || currentThread == mainThread) {
                void **top_of_stack = &dummy;
                
                if (top_of_stack > stackbottom)
@@ -872,9 +872,9 @@ void gc_mark_stack (void)
                        gc_mark_object_at((void*)aThread);
                        if (CONTEXT(aThread).usedStackTop > CONTEXT(aThread).stackEnd)
                                markreferences((void**)CONTEXT(aThread).stackEnd,
-                                                          (void**)CONTEXT(aThread).usedStackTop + 64);
+                                                          (void**)CONTEXT(aThread).usedStackTop);
                        else    
-                               markreferences((void**)CONTEXT(aThread).usedStackTop - 64,
+                               markreferences((void**)CONTEXT(aThread).usedStackTop,
                                                           (void**)CONTEXT(aThread).stackEnd);
            }
 
@@ -950,7 +950,6 @@ gc_call (void)
 
        intsDisable();
        if (currentThread == NULL || currentThread == mainThread) {
-               CONTEXT(mainThread).usedStackTop = &dummy;
                gc_run();
                }
        else