From 5ca2744311af9962130fa27d2dd2c4ad869d7504 Mon Sep 17 00:00:00 2001 From: "willchan@chromium.org" Date: Wed, 11 Nov 2009 21:58:28 +0000 Subject: Implement the memory leak annotations for heap leak checker. leak_annotations.h provides the ANNOTATE_SCOPED_MEMORY_LEAK macro that can be used for annotating known memory leaks in the tests. Those will be ignored by the heap leak checker. Patch contributed by ramosian.glider@gmail.com. Original review at http://codereview.chromium.org/346038/show Review URL: http://codereview.chromium.org/385049 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31721 0039d316-1c4b-4281-b951-d872f2087c98 --- base/DEPS | 1 + base/base.gyp | 26 +++++++++++++++++++++++++- base/leak_annotations.h | 25 +++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 base/leak_annotations.h (limited to 'base') diff --git a/base/DEPS b/base/DEPS index 9ef2764..c454d70 100644 --- a/base/DEPS +++ b/base/DEPS @@ -1,6 +1,7 @@ include_rules = [ "+third_party/libevent", "+third_party/dmg_fp", + "+third_party/tcmalloc", # Testing stuff shouldn't be used by the general base code. "-base/test", diff --git a/base/base.gyp b/base/base.gyp index 52ffe09..bcb88f6 100644 --- a/base/base.gyp +++ b/base/base.gyp @@ -164,6 +164,7 @@ 'keyboard_codes_posix.h', 'lazy_instance.cc', 'lazy_instance.h', + 'leak_annotations.h', 'leak_tracker.h', 'linked_list.h', 'linked_ptr.h', @@ -378,15 +379,38 @@ [ 'OS == "linux" or OS == "freebsd"', { 'sources/': [ ['exclude', '_(mac|win|chromeos)\\.cc$'], ['exclude', '\\.mm?$' ] ], + 'variables' : { + 'linux_use_heapchecker%' : 0, + }, 'conditions': [ [ 'chromeos==1 or toolkit_views==1', { 'sources/': [ ['include', '_chromeos\\.cc$'] ] }, ], - [ 'linux_use_tcmalloc==1', { + [ 'linux_use_heapchecker==1', { + 'defines': [ + 'LINUX_USE_HEAPCHECKER', + ], + 'direct_dependent_settings': { + 'defines': [ + 'LINUX_USE_HEAPCHECKER', + ], + }, + }, + ], + # linux_use_heapchecker==1 implies linux_use_tcmalloc=1. + [ 'linux_use_tcmalloc==1 or linux_use_heapchecker==1', { 'dependencies': [ '../third_party/tcmalloc/tcmalloc.gyp:tcmalloc', ], + 'defines': [ + 'LINUX_USE_TCMALLOC', + ], + 'direct_dependent_settings': { + 'defines': [ + 'LINUX_USE_TCMALLOC', + ], + }, }, ], ], diff --git a/base/leak_annotations.h b/base/leak_annotations.h new file mode 100644 index 0000000..aa57dff --- /dev/null +++ b/base/leak_annotations.h @@ -0,0 +1,25 @@ +// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_LEAK_ANNOTATIONS_H_ +#define BASE_LEAK_ANNOTATIONS_H_ + +#if defined(LINUX_USE_TCMALLOC) && defined(LINUX_USE_HEAPCHECKER) + +#include "third_party/tcmalloc/heap-checker.h" + +// Annotate a program scope as having memory leaks. Tcmalloc's heap leak +// checker will ignore them. Note that these annotations may mask real bugs +// and should not be used in the production code. +#define ANNOTATE_SCOPED_MEMORY_LEAK \ + HeapLeakChecker::Disabler heap_leak_checker_disabler + +#else + +// If tcmalloc is not used, the annotations should be no-ops. +#define ANNOTATE_SCOPED_MEMORY_LEAK + +#endif + +#endif // BASE_LEAK_ANNOTATIONS_H_ -- cgit v1.1