1 // Copyright 2017 The Abseil Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 // Wrappers around lsan_interface functions.
16 // When lsan is not linked in, these functions are not available,
17 // therefore Abseil code which depends on these functions is conditioned on the
18 // definition of LEAK_SANITIZER.
19 #include "absl/debugging/leak_check.h"
20
21 #ifndef LEAK_SANITIZER
22
23 namespace absl {
24 ABSL_NAMESPACE_BEGIN
HaveLeakSanitizer()25 bool HaveLeakSanitizer() { return false; }
DoIgnoreLeak(const void *)26 void DoIgnoreLeak(const void*) { }
RegisterLivePointers(const void *,size_t)27 void RegisterLivePointers(const void*, size_t) { }
UnRegisterLivePointers(const void *,size_t)28 void UnRegisterLivePointers(const void*, size_t) { }
LeakCheckDisabler()29 LeakCheckDisabler::LeakCheckDisabler() { }
~LeakCheckDisabler()30 LeakCheckDisabler::~LeakCheckDisabler() { }
31 ABSL_NAMESPACE_END
32 } // namespace absl
33
34 #else
35
36 #include <sanitizer/lsan_interface.h>
37
38 namespace absl {
39 ABSL_NAMESPACE_BEGIN
HaveLeakSanitizer()40 bool HaveLeakSanitizer() { return true; }
DoIgnoreLeak(const void * ptr)41 void DoIgnoreLeak(const void* ptr) { __lsan_ignore_object(ptr); }
RegisterLivePointers(const void * ptr,size_t size)42 void RegisterLivePointers(const void* ptr, size_t size) {
43 __lsan_register_root_region(ptr, size);
44 }
UnRegisterLivePointers(const void * ptr,size_t size)45 void UnRegisterLivePointers(const void* ptr, size_t size) {
46 __lsan_unregister_root_region(ptr, size);
47 }
LeakCheckDisabler()48 LeakCheckDisabler::LeakCheckDisabler() { __lsan_disable(); }
~LeakCheckDisabler()49 LeakCheckDisabler::~LeakCheckDisabler() { __lsan_enable(); }
50 ABSL_NAMESPACE_END
51 } // namespace absl
52
53 #endif // LEAK_SANITIZER
54