Skip to content

Commit b35c424

Browse files
authored
Merge pull request #216 from mag-sruehl/test/getchainmemleak
added a test for the memory leak in Tree.getChain from #211
2 parents d1d058e + 74c72a6 commit b35c424

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ env:
99

1010
before_script:
1111
- sudo apt-get -qq update
12-
- sudo apt-get install -y libeigen3-dev libcppunit-dev python-sip-dev
12+
- sudo apt-get install -y libeigen3-dev libcppunit-dev python-sip-dev python-psutil
1313
#build orocos_kdl
1414
- cd orocos_kdl
1515
- mkdir build

python_orocos_kdl/package.xml

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
<run_depend>orocos_kdl</run_depend>
1919
<run_depend>python-sip</run_depend>
2020

21+
<test_depend>python-psutil</test_depend>
22+
2123
<export>
2224
<build_type>cmake</build_type>
2325
</export>

python_orocos_kdl/tests/kinfamtest.py

+31-2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@
2020
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
2121

2222

23+
import gc
24+
import random
2325
import unittest
24-
from PyKDL import *
2526
from math import *
26-
import random
27+
28+
import psutil
29+
from PyKDL import *
30+
2731

2832
class KinfamTestFunctions(unittest.TestCase):
2933

@@ -143,12 +147,37 @@ def testFkPosAndIkPos(self):
143147
self.assertEqual(q,q_solved)
144148

145149

150+
class KinfamTestTree(unittest.TestCase):
151+
152+
def setUp(self):
153+
self.tree = Tree()
154+
self.tree.addSegment(Segment(Joint(Joint.RotZ),
155+
Frame(Vector(0.0, 0.0, 0.0))), "foo")
156+
self.tree.addSegment(Segment(Joint(Joint.None),
157+
Frame(Vector(0.0, 0.0, 0.0))), "bar")
158+
159+
def testTreeGetChainMemLeak(self):
160+
""" test for the memory leak in Tree.getChain described in issue #211 """
161+
process = psutil.Process()
162+
self.tree.getChain("foo", "bar")
163+
gc.collect()
164+
mem_before = process.memory_info().vms
165+
# needs at least 2000 iterations on my system to cause a detectable
166+
# difference in memory usage
167+
for _ in xrange(10000):
168+
self.tree.getChain("foo", "bar")
169+
gc.collect()
170+
mem_after = process.memory_info().vms
171+
self.assertEqual(mem_before, mem_after)
172+
173+
146174
def suite():
147175
suite = unittest.TestSuite()
148176
suite.addTest(KinfamTestFunctions('testFkPosAndJac'))
149177
suite.addTest(KinfamTestFunctions('testFkVelAndJac'))
150178
suite.addTest(KinfamTestFunctions('testFkVelAndIkVel'))
151179
suite.addTest(KinfamTestFunctions('testFkPosAndIkPos'))
180+
suite.addTest(KinfamTestTree('testTreeGetChainMemLeak'))
152181
return suite
153182

154183

0 commit comments

Comments
 (0)