Commit bf99e9a
committed
mem leak reported with TVM runtime
[Problem]
In TVM Runtime code, we have a comment that indicates the
manager instance and registry were deliberately leaked to
enable interoperability with Python clients. This shows
up as a leaked resource in C++ API clients.
[Solution]
Add a static guard to differentiate between C++ only clients
Allocate via make_shared()
Leak Report Before
```
2020-09-13T23:39:23.200-07:00 ==3194==ERROR: LeakSanitizer: detected
memory leaks
2020-09-13T23:39:23.200-07:00
2020-09-13T23:39:23.200-07:00 Indirect leak of 2560 byte(s) in 40
object(s) allocated from:
2020-09-13T23:39:23.200-07:00 #0 0x5979ed in operator
new(unsigned long)
(MYAPP/core_unit_tests+0x5979ed)
2020-09-13T23:39:23.200-07:00 neo-ai#1 0x7ff12a187a57 in
tvm::runtime::Registry::Register(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, bool)
(MYAPP/resnet18_v1/libdlr.so+0x72a57)
2020-09-13T23:39:23.200-07:00
2020-09-13T23:39:23.200-07:00 Indirect leak of 2240 byte(s) in 40
object(s) allocated from:
2020-09-13T23:39:23.200-07:00 #0 0x5979ed in operator
new(unsigned long)
(MYAPP/core_unit_tests+0x5979ed)
2020-09-13T23:39:23.200-07:00 neo-ai#1 0x7ff12a188c99 in
std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
tvm::runtime::Registry*>, true>*
std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
tvm::runtime::Registry*>, true> >
>::_M_allocate_node<std::piecewise_construct_t const&,
std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&>, std::tuple<>
>(std::piecewise_construct_t const&,
std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&>&&, std::tuple<>&&)
(MYAPP/resnet18_v1/libdlr.so+0x73c99)
2020-09-13T23:39:23.200-07:00
2020-09-13T23:39:23.200-07:00 Indirect leak of 1116 byte(s) in 36
object(s) allocated from:
2020-09-13T23:39:23.200-07:00 #0 0x5979ed in operator
new(unsigned long)
(MYAPP/core_unit_tests+0x5979ed)
2020-09-13T23:39:23.200-07:00 neo-ai#1 0x7ff12d83cafe in
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)
(/lib/x86_64-linux-gnu/libstdc++.so.6+0x142afe)
2020-09-13T23:39:23.200-07:00
2020-09-13T23:39:23.200-07:00 Indirect leak of 866 byte(s) in 36
object(s) allocated from:
2020-09-13T23:39:23.200-07:00 #0 0x5979ed in operator
new(unsigned long)
(MYAPP/core_unit_tests+0x5979ed)
2020-09-13T23:39:23.200-07:00 neo-ai#1 0x7ff12a188ce0 in
std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
tvm::runtime::Registry*>, true>*
std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
tvm::runtime::Registry*>, true> >
>::_M_allocate_node<std::piecewise_construct_t const&,
std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&>, std::tuple<>
>(std::piecewise_construct_t const&,
std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&>&&, std::tuple<>&&)
(MYAPP//resnet18_v1/libdlr.so+0x73ce0)
2020-09-13T23:39:23.200-07:00
2020-09-13T23:39:23.200-07:00 Indirect leak of 464 byte(s) in 2
object(s) allocated from:
2020-09-13T23:39:23.200-07:00 #0 0x5979ed in operator
new(unsigned long)
(MYAPP/core_unit_tests+0x5979ed)
2020-09-13T23:39:23.200-07:00 neo-ai#1 0x7ff12a188e0a in
std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
tvm::runtime::Registry*>,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
tvm::runtime::Registry*> >, std::__detail::_Select1st,
std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, std::hash<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash,
std::__detail::_Prime_rehash_policy,
std::__detail::_Hashtable_traits<true, false, true>
>::_M_insert_unique_node(unsigned long, unsigned long,
std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const,
tvm::runtime::Registry*>, true>*, unsigned long)
(MYAPP//resnet18_v1/libdlr.so+0x73e0a)
2020-09-13T23:39:23.200-07:00
2020-09-13T23:39:23.200-07:00 Indirect leak of 192 byte(s) in 2
object(s) allocated from:
2020-09-13T23:39:23.200-07:00 #0 0x5979ed in operator
new(unsigned long)
(MYAPP/core_unit_tests+0x5979ed)
2020-09-13T23:39:23.200-07:00 neo-ai#1 0x7ff12a187aca in
tvm::runtime::Registry::Register(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, bool)
(MYAPP//resnet18_v1/libdlr.so+0x72aca)
2020-09-13T23:39:23.200-07:00
2020-09-13T23:39:23.200-07:00 SUMMARY: AddressSanitizer: 7438
byte(s) leaked in 156 allocation(s).
```1 parent 4cbdc40 commit bf99e9a
1 file changed
+12
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| 54 | + | |
54 | 55 | | |
55 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
56 | 61 | | |
57 | 62 | | |
58 | 63 | | |
| |||
68 | 73 | | |
69 | 74 | | |
70 | 75 | | |
71 | | - | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
72 | 79 | | |
73 | 80 | | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
74 | 85 | | |
75 | 86 | | |
76 | 87 | | |
| |||
0 commit comments