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

Print this page
rev 611 : Merge
   1 #ifdef USE_PRAGMA_IDENT_SRC
   2 #pragma ident "@(#)freeChunk.cpp        1.16 07/05/05 17:05:47 JVM"
   3 #endif
   4 /*
   5  * Copyright 2001-2006 Sun Microsystems, Inc.  All Rights Reserved.
   6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   7  *
   8  * This code is free software; you can redistribute it and/or modify it
   9  * under the terms of the GNU General Public License version 2 only, as
  10  * published by the Free Software Foundation.
  11  *
  12  * This code is distributed in the hope that it will be useful, but WITHOUT
  13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15  * version 2 for more details (a copy is included in the LICENSE file that
  16  * accompanied this code).
  17  *
  18  * You should have received a copy of the GNU General Public License version
  19  * 2 along with this work; if not, write to the Free Software Foundation,
  20  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  21  *
  22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  23  * CA 95054 USA or visit www.sun.com if you need additional information or
  24  * have any questions.
  25  *  


  33 #define baadbabeHeapWord badHeapWordVal
  34 #define deadbeefHeapWord 0xdeadbeef
  35 
  36 size_t const FreeChunk::header_size() {
  37   return sizeof(FreeChunk)/HeapWordSize;
  38 }
  39 
  40 void FreeChunk::mangleAllocated(size_t size) {
  41   // mangle all but the header of a just-allocated block
  42   // of storage
  43   assert(size >= MinChunkSize, "smallest size of object");
  44   // we can't assert that _size == size because this may be an
  45   // allocation out of a linear allocation block
  46   assert(sizeof(FreeChunk) % HeapWordSize == 0,
  47          "shouldn't write beyond chunk");
  48   HeapWord* addr = (HeapWord*)this;
  49   size_t hdr = header_size();
  50   Copy::fill_to_words(addr + hdr, size - hdr, baadbabeHeapWord);
  51 }
  52 
  53 void FreeChunk::mangleFreed(size_t size) {
  54   assert(baadbabeHeapWord != deadbeefHeapWord, "Need distinct patterns");
  55   // mangle all but the header of a just-freed block of storage
  56   // just prior to passing it to the storage dictionary
  57   assert(size >= MinChunkSize, "smallest size of object");
  58   assert(size == _size, "just checking");
  59   HeapWord* addr = (HeapWord*)this;
  60   size_t hdr = header_size();
  61   Copy::fill_to_words(addr + hdr, size - hdr, deadbeefHeapWord);
  62 }
  63 
  64 void FreeChunk::verifyList() const {
  65   FreeChunk* nextFC = next();
  66   if (nextFC != NULL) {
  67     assert(this == nextFC->prev(), "broken chain");
  68     assert(size() == nextFC->size(), "wrong size");
  69     nextFC->verifyList();
  70   }
  71 }
  72 #endif
   1 #ifdef USE_PRAGMA_IDENT_SRC
   2 #pragma ident "@(#)freeChunk.cpp        1.16 07/05/05 17:05:47 JVM"
   3 #endif
   4 /*
   5  * Copyright 2001-2008 Sun Microsystems, Inc.  All Rights Reserved.
   6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   7  *
   8  * This code is free software; you can redistribute it and/or modify it
   9  * under the terms of the GNU General Public License version 2 only, as
  10  * published by the Free Software Foundation.
  11  *
  12  * This code is distributed in the hope that it will be useful, but WITHOUT
  13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15  * version 2 for more details (a copy is included in the LICENSE file that
  16  * accompanied this code).
  17  *
  18  * You should have received a copy of the GNU General Public License version
  19  * 2 along with this work; if not, write to the Free Software Foundation,
  20  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  21  *
  22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  23  * CA 95054 USA or visit www.sun.com if you need additional information or
  24  * have any questions.
  25  *  


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