Changeset 5951
- Timestamp:
- Feb 21, 2007, 4:58:51 AM (18 years ago)
- Location:
- trunk/ccl/lisp-kernel
- Files:
-
- 2 edited
-
ppc-exceptions.c (modified) (5 diffs)
-
x86-exceptions.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/lisp-kernel/ppc-exceptions.c
r5635 r5951 364 364 } 365 365 366 natural gc_deferred = 0, full_gc_deferred = 0; 367 366 368 OSStatus 367 369 handle_gc_trap(ExceptionInformation *xp, TCR *tcr) … … 372 374 area *a = active_dynamic_area; 373 375 Boolean egc_was_enabled = (a->older != NULL); 376 natural gc_previously_deferred = gc_deferred; 374 377 375 378 … … 416 419 417 420 if (selector == GC_TRAP_FUNCTION_IMMEDIATE_GC) { 418 gc_from_xp(xp, 0L); 419 break; 421 if (!full_gc_deferred) { 422 gc_from_xp(xp, 0L); 423 break; 424 } 425 /* Tried to do a full GC when gc was disabled. That failed, 426 so try full GC now */ 427 selector = GC_TRAP_FUNCTION_GC; 420 428 } 421 429 … … 424 432 } 425 433 gc_from_xp(xp, 0L); 434 if (gc_deferred > gc_previously_deferred) { 435 full_gc_deferred = 1; 436 } else { 437 full_gc_deferred = 0; 438 } 426 439 if (selector > GC_TRAP_FUNCTION_GC) { 427 440 if (selector & GC_TRAP_FUNCTION_IMPURIFY) { … … 680 693 } 681 694 resume_other_threads(true); 695 gc_deferred++; 682 696 return 0; 683 697 } 698 gc_deferred = 0; 684 699 685 700 gc_tcr = tcr; -
trunk/ccl/lisp-kernel/x86-exceptions.c
r5616 r5951 141 141 } 142 142 143 natural gc_deferred = 0, full_gc_deferred = 0; 144 143 145 Boolean 144 146 handle_gc_trap(ExceptionInformation *xp, TCR *tcr) … … 149 151 area *a = active_dynamic_area; 150 152 Boolean egc_was_enabled = (a->older != NULL); 153 natural gc_previously_deferred = gc_deferred; 151 154 152 155 switch (selector) { … … 192 195 193 196 if (selector == GC_TRAP_FUNCTION_IMMEDIATE_GC) { 194 gc_from_xp(xp, 0L); 195 break; 197 if (!full_gc_deferred) { 198 gc_from_xp(xp, 0L); 199 break; 200 } 201 /* Tried to do a full GC when gc was disabled. That failed, 202 so try full GC now */ 203 selector = GC_TRAP_FUNCTION_GC; 196 204 } 197 205 … … 200 208 } 201 209 gc_from_xp(xp, 0L); 210 if (gc_deferred > gc_previously_deferred) { 211 full_gc_deferred = 1; 212 } else { 213 full_gc_deferred = 0; 214 } 202 215 if (selector & GC_TRAP_FUNCTION_PURIFY) { 203 216 purify_from_xp(xp, 0L); … … 1640 1653 TCR *gc_tcr = NULL; 1641 1654 1655 1642 1656 int 1643 1657 gc_like_from_xp(ExceptionInformation *xp, … … 1657 1671 } 1658 1672 resume_other_threads(true); 1673 gc_deferred++; 1659 1674 return 0; 1660 1675 } 1676 gc_deferred = 0; 1661 1677 1662 1678 gc_tcr = tcr;
Note:
See TracChangeset
for help on using the changeset viewer.
