Print this page
rev 3900 : 8004816: G1: Kitchensink failures after marking stack changes
Summary: Reset the marking state, including the mark stack overflow flag, in the event of a marking stack overflow during serial reference processing.
Reviewed-by: jmasa

Split Close
Expand all
Collapse all
          --- old/src/share/vm/gc_implementation/g1/concurrentMark.hpp
          +++ new/src/share/vm/gc_implementation/g1/concurrentMark.hpp
↓ open down ↓ 470 lines elided ↑ open up ↑
 471  471    ForceOverflowSettings _force_overflow_conc;
 472  472    ForceOverflowSettings _force_overflow_stw;
 473  473  
 474  474    void weakRefsWork(bool clear_all_soft_refs);
 475  475  
 476  476    void swapMarkBitMaps();
 477  477  
 478  478    // It resets the global marking data structures, as well as the
 479  479    // task local ones; should be called during initial mark.
 480  480    void reset();
 481      -  // It resets all the marking data structures.
 482      -  void clear_marking_state(bool clear_overflow = true);
      481 +  
      482 +  // Resets all the marking data structures. Called when we have to restart
      483 +  // marking or when marking completes (via set_non_marking_state below).
      484 +  void reset_marking_state(bool clear_overflow = true);
 483  485  
 484      -  // It should be called to indicate which phase we're in (concurrent
 485      -  // mark or remark) and how many threads are currently active.
 486      -  void set_phase(uint active_tasks, bool concurrent);
 487  486    // We do this after we're done with marking so that the marking data
 488  487    // structures are initialised to a sensible and predictable state.
 489  488    void set_non_marking_state();
 490  489  
      490 +  // It should be called to indicate which phase we're in (concurrent
      491 +  // mark or remark) and how many threads are currently active.
      492 +  void set_phase(uint active_tasks, bool concurrent);
      493 +
 491  494    // prints all gathered CM-related statistics
 492  495    void print_stats();
 493  496  
 494  497    bool cleanup_list_is_empty() {
 495  498      return _cleanup_list.is_empty();
 496  499    }
 497  500  
 498  501    // accessor methods
 499  502    uint parallel_marking_threads() { return _parallel_marking_threads; }
 500  503    uint max_parallel_marking_threads() { return _max_parallel_marking_threads;}
↓ open down ↓ 760 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX