| 561 | //========================================================================== |
| 562 | |
| 563 | void FullGC() |
| 564 | { |
| 565 | bool ContinueCheck = true; |
| 566 | while (ContinueCheck) |
| 567 | { |
| 568 | ContinueCheck = false; |
| 569 | if (State <= GCS_Propagate) |
| 570 | { |
| 571 | // Reset sweep mark to sweep all elements (returning them to white) |
| 572 | SweepPos = &Root; |
| 573 | // Reset other collector lists |
| 574 | Gray = nullptr; |
| 575 | State = GCS_Sweep; |
| 576 | } |
| 577 | // Finish any pending GC stages |
| 578 | while (State != GCS_Pause) |
| 579 | { |
| 580 | SingleStep(); |
| 581 | } |
| 582 | // Loop until everything that can be destroyed and freed is |
| 583 | do |
| 584 | { |
| 585 | MarkRoot(); |
| 586 | while (State != GCS_Pause) |
| 587 | { |
| 588 | SingleStep(); |
| 589 | } |
| 590 | ContinueCheck |= HadToDestroy; |
| 591 | } while (HadToDestroy); |
| 592 | } |
| 593 | } |
| 594 | |
| 595 | //========================================================================== |
| 596 | // |
no test coverage detected