stats: fix memory leakage when adding / deleting interfaces
This fixes two leaks in registering errors in the stats segment.
- The error name created by vlib_register_errors() was not freed.
- Duplicate error names (when interface readded) was added to the vector.
This fix also adds memory usage statistics for the statistics segment
as /mem/statseg/{used, total}
Change-Id: Ife98d5fc5baef5bdae426a5a1eef428af2b9ab8a
Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python2.7
|
||||
|
||||
import unittest
|
||||
|
||||
import time
|
||||
import psutil
|
||||
from vpp_papi.vpp_stats import VPPStats
|
||||
|
||||
@@ -42,6 +42,23 @@ class StatsClientTestCase(VppTestCase):
|
||||
"is not equal to "
|
||||
"ending client side file descriptor count: %s" % (
|
||||
initial_fds, ending_fds))
|
||||
@unittest.skip("Manual only")
|
||||
def test_mem_leak(self):
|
||||
def loop():
|
||||
print('Running loop')
|
||||
for i in range(50):
|
||||
rv = self.vapi.papi.tap_create_v2(id=i, use_random_mac=1)
|
||||
self.assertEqual(rv.retval, 0)
|
||||
rv = self.vapi.papi.tap_delete_v2(sw_if_index=rv.sw_if_index)
|
||||
self.assertEqual(rv.retval, 0)
|
||||
|
||||
before = self.statistics.get_counter('/mem/statseg/used')
|
||||
loop()
|
||||
self.vapi.cli("memory-trace on stats-segment")
|
||||
for j in range(100):
|
||||
loop()
|
||||
print(self.vapi.cli("show memory stats-segment verbose"))
|
||||
print('AFTER', before, self.statistics.get_counter('/mem/statseg/used'))
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main(testRunner=VppTestRunner)
|
||||
|
||||
Reference in New Issue
Block a user