< prev index next >

src/share/vm/gc/shared/cardTableModRefBSForCTRS.hpp

Print this page
rev 10742 : Make fields used in lock-free algorithms volatile

@@ -78,11 +78,11 @@
   // This is an array, one element per covered region of the card table.
   // Each entry is itself an array, with one element per chunk in the
   // covered region.  Each entry of these arrays is the lowest non-clean
   // card of the corresponding chunk containing part of an object from the
   // previous chunk, or else NULL.
-  typedef jbyte*  CardPtr;
+  typedef volatile jbyte*  CardPtr;
   typedef CardPtr* CardArr;
   CardArr* _lowest_non_clean;
   size_t*  _lowest_non_clean_chunk_size;
   uintptr_t* _lowest_non_clean_base_chunk_index;
   int* _last_LNC_resizing_collection;

@@ -91,11 +91,11 @@
   // covering "sp", and "lowest_non_clean_base_chunk_index" to the chunk
   // index of the corresponding to the first element of that array.
   // Ensures that these arrays are of sufficient size, allocating if necessary.
   // May be called by several threads concurrently.
   void get_LNC_array_for_space(Space* sp,
-                               jbyte**& lowest_non_clean,
+                               volatile jbyte**& lowest_non_clean,
                                uintptr_t& lowest_non_clean_base_chunk_index,
                                size_t& lowest_non_clean_chunk_size);
 
   // Returns the number of chunks necessary to cover "mr".
   size_t chunks_to_cover(MemRegion mr) {

@@ -115,22 +115,22 @@
   void process_stride(Space* sp,
                       MemRegion used,
                       jint stride, int n_strides,
                       OopsInGenClosure* cl,
                       CardTableRS* ct,
-                      jbyte** lowest_non_clean,
+                      volatile jbyte** lowest_non_clean,
                       uintptr_t lowest_non_clean_base_chunk_index,
                       size_t lowest_non_clean_chunk_size);
 
   // Makes sure that chunk boundaries are handled appropriately, by
   // adjusting the min_done of dcto_cl, and by using a special card-table
   // value to indicate how min_done should be set.
   void process_chunk_boundaries(Space* sp,
                                 DirtyCardToOopClosure* dcto_cl,
                                 MemRegion chunk_mr,
                                 MemRegion used,
-                                jbyte** lowest_non_clean,
+                                volatile jbyte** lowest_non_clean,
                                 uintptr_t lowest_non_clean_base_chunk_index,
                                 size_t    lowest_non_clean_chunk_size);
 
 };
 

@@ -138,6 +138,5 @@
 struct BarrierSet::GetName<CardTableModRefBSForCTRS> {
   static const BarrierSet::Name value = BarrierSet::CardTableForRS;
 };
 
 #endif // include guard
-
< prev index next >