1// Copyright (c) 2005, 2007, Google Inc. 2// All rights reserved. 3// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserved. 4// 5// Redistribution and use in source and binary forms, with or without 6// modification, are permitted provided that the following conditions are 7// met: 8// 9// * Redistributions of source code must retain the above copyright 10// notice, this list of conditions and the following disclaimer. 11// * Redistributions in binary form must reproduce the above 12// copyright notice, this list of conditions and the following disclaimer 13// in the documentation and/or other materials provided with the 14// distribution. 15// * Neither the name of Google Inc. nor the names of its 16// contributors may be used to endorse or promote products derived from 17// this software without specific prior written permission. 18// 19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31#include "config.h" 32#include "wtf/FastMalloc.h" 33 34#include "wtf/PartitionAlloc.h" 35#include "wtf/SpinLock.h" 36#include <string.h> 37 38namespace WTF { 39 40static PartitionAllocatorGeneric gPartition; 41static int gLock = 0; 42static bool gInitialized = false; 43 44void* fastZeroedMalloc(size_t n) 45{ 46 void* result = fastMalloc(n); 47 memset(result, 0, n); 48 return result; 49} 50 51char* fastStrDup(const char* src) 52{ 53 size_t len = strlen(src) + 1; 54 char* dup = static_cast<char*>(fastMalloc(len)); 55 memcpy(dup, src, len); 56 return dup; 57} 58 59void fastMallocShutdown() 60{ 61 gPartition.shutdown(); 62} 63 64void* fastMalloc(size_t n) 65{ 66 if (UNLIKELY(!gInitialized)) { 67 spinLockLock(&gLock); 68 if (!gInitialized) { 69 gInitialized = true; 70 gPartition.init(); 71 } 72 spinLockUnlock(&gLock); 73 } 74 return partitionAllocGeneric(gPartition.root(), n); 75} 76 77void fastFree(void* p) 78{ 79 partitionFreeGeneric(gPartition.root(), p); 80} 81 82void* fastRealloc(void* p, size_t n) 83{ 84 return partitionReallocGeneric(gPartition.root(), p, n); 85} 86 87} // namespace WTF 88