Skip to content

Commit

Permalink
Not using aligned_alloc with gcc4 + asan
Browse files Browse the repository at this point in the history
Summary:
GCC < 5 + ASAN does not instrument aligned_alloc, which can make ASAN
report false-positive with "free on address which was not malloc" error.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61693

Also suppress leak warning with LRUCache::DisownData().
Closes facebook#2783

Differential Revision: D5696465

Pulled By: yiwu-arbug

fbshipit-source-id: 87c607c002511fa089b18cc35e24909bee0e74b4
  • Loading branch information
Yi Wu authored and facebook-github-bot committed Aug 30, 2017
1 parent 0980dc6 commit e83d6a0
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 18 deletions.
23 changes: 6 additions & 17 deletions cache/lru_cache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -234,35 +234,19 @@ void LRUCacheShard::EvictFromLRU(size_t charge,
}

void* LRUCacheShard::operator new(size_t size) {
#if __SANITIZE_ADDRESS__
return malloc(size);
#else
return port::cacheline_aligned_alloc(size);
#endif
}

void* LRUCacheShard::operator new[](size_t size) {
#if __SANITIZE_ADDRESS__
return malloc(size);
#else
return port::cacheline_aligned_alloc(size);
#endif
}

void LRUCacheShard::operator delete(void *memblock) {
#if __SANITIZE_ADDRESS__
free(memblock);
#else
port::cacheline_aligned_free(memblock);
#endif
}

void LRUCacheShard::operator delete[](void* memblock) {
#if __SANITIZE_ADDRESS__
free(memblock);
#else
port::cacheline_aligned_free(memblock);
#endif
}

void LRUCacheShard::SetCapacity(size_t capacity) {
Expand Down Expand Up @@ -518,7 +502,12 @@ uint32_t LRUCache::GetHash(Handle* handle) const {
return reinterpret_cast<const LRUHandle*>(handle)->hash;
}

void LRUCache::DisownData() { shards_ = nullptr; }
void LRUCache::DisownData() {
// Do not drop data if compile with ASAN to suppress leak warning.
#ifndef __SANITIZE_ADDRESS__
shards_ = nullptr;
#endif // !__SANITIZE_ADDRESS__
}

size_t LRUCache::TEST_GetLRUSize() {
size_t lru_size_of_all_shards = 0;
Expand Down
4 changes: 3 additions & 1 deletion port/port_posix.cc
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,9 @@ int GetMaxOpenFiles() {
}

void *cacheline_aligned_alloc(size_t size) {
#if defined (_ISOC11_SOURCE)
#if __GNUC__ < 5 && defined(__SANITIZE_ADDRESS__)
return malloc(size);
#elif defined(_ISOC11_SOURCE)
return aligned_alloc(CACHE_LINE_SIZE, size);
#elif ( _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__APPLE__))
void *m;
Expand Down

0 comments on commit e83d6a0

Please sign in to comment.