src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File cms-comp Sdiff src/share/vm/gc_implementation/concurrentMarkSweep

src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp

Print this page




  30 #define baadbabeHeapWord badHeapWordVal
  31 #define deadbeefHeapWord 0xdeadbeef
  32 
  33 size_t const FreeChunk::header_size() {
  34   return sizeof(FreeChunk)/HeapWordSize;
  35 }
  36 
  37 void FreeChunk::mangleAllocated(size_t size) {
  38   // mangle all but the header of a just-allocated block
  39   // of storage
  40   assert(size >= MinChunkSize, "smallest size of object");
  41   // we can't assert that _size == size because this may be an
  42   // allocation out of a linear allocation block
  43   assert(sizeof(FreeChunk) % HeapWordSize == 0,
  44          "shouldn't write beyond chunk");
  45   HeapWord* addr = (HeapWord*)this;
  46   size_t hdr = header_size();
  47   Copy::fill_to_words(addr + hdr, size - hdr, baadbabeHeapWord);
  48 }
  49 
  50 void FreeChunk::mangleFreed(size_t size) {
  51   assert(baadbabeHeapWord != deadbeefHeapWord, "Need distinct patterns");
  52   // mangle all but the header of a just-freed block of storage
  53   // just prior to passing it to the storage dictionary
  54   assert(size >= MinChunkSize, "smallest size of object");
  55   assert(size == _size, "just checking");
  56   HeapWord* addr = (HeapWord*)this;
  57   size_t hdr = header_size();
  58   Copy::fill_to_words(addr + hdr, size - hdr, deadbeefHeapWord);
  59 }
  60 
  61 void FreeChunk::verifyList() const {
  62   FreeChunk* nextFC = next();
  63   if (nextFC != NULL) {
  64     assert(this == nextFC->prev(), "broken chain");
  65     assert(size() == nextFC->size(), "wrong size");
  66     nextFC->verifyList();
  67   }
  68 }
  69 #endif


  30 #define baadbabeHeapWord badHeapWordVal
  31 #define deadbeefHeapWord 0xdeadbeef
  32 
  33 size_t const FreeChunk::header_size() {
  34   return sizeof(FreeChunk)/HeapWordSize;
  35 }
  36 
  37 void FreeChunk::mangleAllocated(size_t size) {
  38   // mangle all but the header of a just-allocated block
  39   // of storage
  40   assert(size >= MinChunkSize, "smallest size of object");
  41   // we can't assert that _size == size because this may be an
  42   // allocation out of a linear allocation block
  43   assert(sizeof(FreeChunk) % HeapWordSize == 0,
  44          "shouldn't write beyond chunk");
  45   HeapWord* addr = (HeapWord*)this;
  46   size_t hdr = header_size();
  47   Copy::fill_to_words(addr + hdr, size - hdr, baadbabeHeapWord);
  48 }
  49 
  50 void FreeChunk::mangleFreed(size_t sz) {
  51   assert(baadbabeHeapWord != deadbeefHeapWord, "Need distinct patterns");
  52   // mangle all but the header of a just-freed block of storage
  53   // just prior to passing it to the storage dictionary
  54   assert(sz >= MinChunkSize, "smallest size of object");
  55   assert(sz == size(), "just checking");
  56   HeapWord* addr = (HeapWord*)this;
  57   size_t hdr = header_size();
  58   Copy::fill_to_words(addr + hdr, sz - hdr, deadbeefHeapWord);
  59 }
  60 
  61 void FreeChunk::verifyList() const {
  62   FreeChunk* nextFC = next();
  63   if (nextFC != NULL) {
  64     assert(this == nextFC->prev(), "broken chain");
  65     assert(size() == nextFC->size(), "wrong size");
  66     nextFC->verifyList();
  67   }
  68 }
  69 #endif
src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File