| OLD | NEW | 
|---|
| 1 // Copyright (c) 2008, Google Inc. | 1 // Copyright (c) 2008, Google Inc. | 
| 2 // All rights reserved. | 2 // All rights reserved. | 
| 3 // | 3 // | 
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without | 
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are | 
| 6 // met: | 6 // met: | 
| 7 // | 7 // | 
| 8 //     * Redistributions of source code must retain the above copyright | 8 //     * Redistributions of source code must retain the above copyright | 
| 9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. | 
| 10 //     * Redistributions in binary form must reproduce the above | 10 //     * Redistributions in binary form must reproduce the above | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 35 | 35 | 
| 36 #include <config.h> | 36 #include <config.h> | 
| 37 #ifdef HAVE_PTHREAD | 37 #ifdef HAVE_PTHREAD | 
| 38 #include <pthread.h>                    // for pthread_t, pthread_key_t | 38 #include <pthread.h>                    // for pthread_t, pthread_key_t | 
| 39 #endif | 39 #endif | 
| 40 #include <stddef.h>                     // for size_t, NULL | 40 #include <stddef.h>                     // for size_t, NULL | 
| 41 #ifdef HAVE_STDINT_H | 41 #ifdef HAVE_STDINT_H | 
| 42 #include <stdint.h>                     // for uint32_t, uint64_t | 42 #include <stdint.h>                     // for uint32_t, uint64_t | 
| 43 #endif | 43 #endif | 
| 44 #include <sys/types.h>                  // for ssize_t | 44 #include <sys/types.h>                  // for ssize_t | 
| 45 #include "common.h" | 45 #include "common.h"            // for SizeMap, kMaxSize, etc | 
| 46 #include "linked_list.h" | 46 #include "free_list.h"  // for FL_Pop, FL_PopRange, etc | 
|  | 47 #include "internal_logging.h"  // for ASSERT, etc | 
| 47 #include "maybe_threads.h" | 48 #include "maybe_threads.h" | 
| 48 #include "page_heap_allocator.h" |  | 
| 49 #include "sampler.h" |  | 
| 50 #include "static_vars.h" |  | 
| 51 |  | 
| 52 #include "common.h"            // for SizeMap, kMaxSize, etc |  | 
| 53 #include "internal_logging.h"  // for ASSERT, etc |  | 
| 54 #include "linked_list.h"       // for SLL_Pop, SLL_PopRange, etc |  | 
| 55 #include "page_heap_allocator.h"  // for PageHeapAllocator | 49 #include "page_heap_allocator.h"  // for PageHeapAllocator | 
| 56 #include "sampler.h"           // for Sampler | 50 #include "sampler.h"           // for Sampler | 
| 57 #include "static_vars.h"       // for Static | 51 #include "static_vars.h"       // for Static | 
| 58 | 52 | 
| 59 namespace tcmalloc { | 53 namespace tcmalloc { | 
| 60 | 54 | 
| 61 // Even if we have support for thread-local storage in the compiler | 55 // Even if we have support for thread-local storage in the compiler | 
| 62 // and linker, the OS may not support it.  We need to check that at | 56 // and linker, the OS may not support it.  We need to check that at | 
| 63 // runtime.  Right now, we have to keep a manual set of "bad" OSes. | 57 // runtime.  Right now, we have to keep a manual set of "bad" OSes. | 
| 64 #if defined(HAVE_TLS) | 58 #if defined(HAVE_TLS) | 
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 191     // Is list empty? | 185     // Is list empty? | 
| 192     bool empty() const { | 186     bool empty() const { | 
| 193       return list_ == NULL; | 187       return list_ == NULL; | 
| 194     } | 188     } | 
| 195 | 189 | 
| 196     // Low-water mark management | 190     // Low-water mark management | 
| 197     int lowwatermark() const { return lowater_; } | 191     int lowwatermark() const { return lowater_; } | 
| 198     void clear_lowwatermark() { lowater_ = length_; } | 192     void clear_lowwatermark() { lowater_ = length_; } | 
| 199 | 193 | 
| 200     void Push(void* ptr) { | 194     void Push(void* ptr) { | 
| 201       SLL_Push(&list_, ptr); | 195       FL_Push(&list_, ptr); | 
| 202       length_++; | 196       length_++; | 
| 203     } | 197     } | 
| 204 | 198 | 
| 205     void* Pop() { | 199     void* Pop() { | 
| 206       ASSERT(list_ != NULL); | 200       ASSERT(list_ != NULL); | 
| 207       length_--; | 201       length_--; | 
| 208       if (length_ < lowater_) lowater_ = length_; | 202       if (length_ < lowater_) lowater_ = length_; | 
| 209       return SLL_Pop(&list_); | 203       return FL_Pop(&list_); | 
| 210     } | 204     } | 
| 211 | 205 | 
| 212     void PushRange(int N, void *start, void *end) { | 206     void PushRange(int N, void *start, void *end) { | 
| 213       SLL_PushRange(&list_, start, end); | 207       FL_PushRange(&list_, start, end); | 
| 214       length_ += N; | 208       length_ += N; | 
| 215     } | 209     } | 
| 216 | 210 | 
| 217     void PopRange(int N, void **start, void **end) { | 211     void PopRange(int N, void **start, void **end) { | 
| 218       SLL_PopRange(&list_, N, start, end); | 212       FL_PopRange(&list_, N, start, end); | 
| 219       ASSERT(length_ >= N); | 213       ASSERT(length_ >= N); | 
| 220       length_ -= N; | 214       length_ -= N; | 
| 221       if (length_ < lowater_) lowater_ = length_; | 215       if (length_ < lowater_) lowater_ = length_; | 
| 222     } | 216     } | 
| 223   }; | 217   }; | 
| 224 | 218 | 
| 225   // Gets and returns an object from the central cache, and, if possible, | 219   // Gets and returns an object from the central cache, and, if possible, | 
| 226   // also adds some objects of that size class to this thread cache. | 220   // also adds some objects of that size class to this thread cache. | 
| 227   void* FetchFromCentralCache(size_t cl, size_t byte_size); | 221   void* FetchFromCentralCache(size_t cl, size_t byte_size); | 
| 228 | 222 | 
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 389 // because we may be in the thread destruction code and may have | 383 // because we may be in the thread destruction code and may have | 
| 390 // already cleaned up the cache for this thread. | 384 // already cleaned up the cache for this thread. | 
| 391 inline ThreadCache* ThreadCache::GetCacheIfPresent() { | 385 inline ThreadCache* ThreadCache::GetCacheIfPresent() { | 
| 392   if (!tsd_inited_) return NULL; | 386   if (!tsd_inited_) return NULL; | 
| 393   return GetThreadHeap(); | 387   return GetThreadHeap(); | 
| 394 } | 388 } | 
| 395 | 389 | 
| 396 }  // namespace tcmalloc | 390 }  // namespace tcmalloc | 
| 397 | 391 | 
| 398 #endif  // TCMALLOC_THREAD_CACHE_H_ | 392 #endif  // TCMALLOC_THREAD_CACHE_H_ | 
| OLD | NEW | 
|---|