From 6adaaec3b033bfb06643cac4ec83901b45194d40 Mon Sep 17 00:00:00 2001 From: Darren Ranalli Date: Wed, 26 Apr 2006 21:14:27 +0000 Subject: [PATCH] no leaked tasks on exit --- .../distributed/DistributedCartesianGrid.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/direct/src/distributed/DistributedCartesianGrid.py b/direct/src/distributed/DistributedCartesianGrid.py index f1d7fe930b..639df98038 100755 --- a/direct/src/distributed/DistributedCartesianGrid.py +++ b/direct/src/distributed/DistributedCartesianGrid.py @@ -5,6 +5,7 @@ from direct.interval.IntervalGlobal import * from direct.distributed.DistributedNode import DistributedNode from direct.task import Task from direct.gui import DirectGuiGlobals +from direct.showbase.EventGroup import EventGroup if __debug__: # For grid drawing @@ -76,10 +77,17 @@ class DistributedCartesianGrid(DistributedNode, CartesianGridBase): taskMgr.add( self.processVisibility, self.taskName("processVisibility")) - def stopProcessVisibility(self, clearAll=False): + def stopProcessVisibility(self, clearAll=False, event=None): taskMgr.remove(self.taskName("processVisibility")) + if event is not None: + eventGroup = EventGroup('DistCartesianGrid.stopProcessVis', + doneEvent=event) if self.gridVisContext is not None: - self.cr.removeInterest(self.gridVisContext) + if event is not None: + removeEvent = eventGroup.newEvent('%s.removeInterest' % self.doId) + else: + removeEvent = None + self.cr.removeInterest(self.gridVisContext, removeEvent) self.gridVisContext = None self.visAvatar = None self.visZone = None @@ -87,7 +95,11 @@ class DistributedCartesianGrid(DistributedNode, CartesianGridBase): # sometimes we also need to remove vis avatar from # my parent if it is also a grid if (clearAll): - self.cr.doId2do[self.parentId].worldGrid.stopProcessVisibility() + if event is not None: + parentEvent = eventGroup.newEvent('%s.parent.removeInterest' % self.doId) + else: + parentEvent = None + self.cr.doId2do[self.parentId].worldGrid.stopProcessVisibility(event=parentEvent) def processVisibility(self, task): pos = self.visAvatar.getPos(self)