Skip to content

Commit

Permalink
fixed memory leak in module bind
Browse files Browse the repository at this point in the history
  • Loading branch information
es92 committed Nov 22, 2014
1 parent 87bacaf commit c750f0f
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 8 deletions.
17 changes: 15 additions & 2 deletions src/prpy/base/wamrobot.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,23 @@ def CloneBindings(self, parent):
Robot.CloneBindings(self, parent)

self.mac_retimer = None
self.trajectory_module = prpy.rave.load_module(self.GetEnv(), 'Trajectory', self.GetName())
#import manipulation2.trajectory
trajectory_module = prpy.rave.load_module(self.GetEnv(), 'Trajectory', self.GetName())
import manipulation2.trajectory
#manipulation2.trajectory.bind(self.trajectory_module)

def myFun(x):
pass
import types

class Object():
pass

self.trajectory_module = Object()
self.trajectory_module.module = trajectory_module
self.trajectory_module.blendtrajectory = types.MethodType(manipulation2.trajectory.blendtrajectory, trajectory_module)
self.trajectory_module.executeblendedtrajectory = types.MethodType(manipulation2.trajectory.executeblendedtrajectory, trajectory_module)


def RetimeTrajectory(self, traj, max_jerk=30.0, synchronize=False,
stop_on_stall=True, stop_on_ft=False, force_direction=None,
force_magnitude=None, torque=None, **kw_args):
Expand Down
5 changes: 3 additions & 2 deletions src/prpy/bind.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,8 @@ def cleanup_callback(owner, flag):
# NOTE: this is also an acceptable body for the loop :)
# clear_referrers(children[0])
InstanceDeduplicator.logger.info(owner)
clear_referrers(canonical_instance)
if canonical_instance != None:
clear_referrers(canonical_instance)

@classmethod
def get_storage_methods(cls, target):
Expand Down Expand Up @@ -275,7 +276,7 @@ def get_bound_children(cls, parent):
child_keys = user_data[parent_key][cls.USERDATA_CHILDREN]
except KeyError:
# There are no bound children.
return []
return [], None

# Resolve the key to an instance.
children = []
Expand Down
30 changes: 26 additions & 4 deletions src/prpy/planning/chomp.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,19 +136,41 @@ def get_affected_links(body, dof_indices):
class CHOMPPlanner(BasePlanner):
def __init__(self):
super(CHOMPPlanner, self).__init__()
self.setupEnv(self.env)

def setupEnv(self, env):
self.env = env
try:
from orcdchomp import orcdchomp
self.module = openravepy.RaveCreateModule(self.env, 'orcdchomp')
module = openravepy.RaveCreateModule(self.env, 'orcdchomp')
except ImportError:
raise UnsupportedPlanningError('Unable to import orcdchomp.')
except openravepy.openrave_exception as e:
raise UnsupportedPlanningError('Unable to create orcdchomp module: %s' % e)

if self.module is None:
if module is None:
raise UnsupportedPlanningError('Failed loading module.')

self.initialized = False
orcdchomp.bind(self.module)
#orcdchomp.bind(self.module)

class Object():
pass

import types

self.module = Object()
self.module.module = module
self.module.viewspheres = types.MethodType(orcdchomp.viewspheres,module)
self.module.computedistancefield = types.MethodType(orcdchomp.computedistancefield,module)
self.module.addfield_fromobsarray = types.MethodType(orcdchomp.addfield_fromobsarray,module)
self.module.removefield = types.MethodType(orcdchomp.removefield,module)
self.module.create = types.MethodType(orcdchomp.create,module)
self.module.iterate = types.MethodType(orcdchomp.iterate,module)
self.module.gettraj = types.MethodType(orcdchomp.gettraj,module)
self.module.destroy = types.MethodType(orcdchomp.destroy,module)
self.module.runchomp = types.MethodType(orcdchomp.runchomp,module)
self.module.GetEnv = self.module.module.GetEnv

self.distance_fields = DistanceFieldManager(self.module)

def __str__(self):
Expand Down

0 comments on commit c750f0f

Please sign in to comment.