Browse Source

*** empty log message ***

Jesse Schell 25 years ago
parent
commit
51ec5d8e95

+ 3 - 4
direct/src/distributed/ClientRepository.py

@@ -236,10 +236,9 @@ class ClientRepository(DirectObject.DirectObject):
             del(self.doId2cdc[doId])
             del(self.doId2cdc[doId])
             # Sanity check the dictionaries
             # Sanity check the dictionaries
             assert(len(self.doId2do) == len(self.doId2cdc))
             assert(len(self.doId2do) == len(self.doId2cdc))
-            # Disable the object itself
-            obj.disableAndAnnounce()
-            # Delete the object itself
-            obj.delete()
+            # Disable, announce, and delete the object itself...
+            # unless delayDelete is on...
+            obj.deleteOrDelay()
         # If it is in the cache, remove it.
         # If it is in the cache, remove it.
         elif self.cache.contains(doId):
         elif self.cache.contains(doId):
             self.cache.delete(doId)
             self.cache.delete(doId)

+ 36 - 0
direct/src/distributed/DistributedObject.py

@@ -14,6 +14,13 @@ class DistributedObject(PandaObject):
             # that lives in the UberZone. This keeps them from being disabled when you change
             # that lives in the UberZone. This keeps them from being disabled when you change
             # zones, even to the quiet zone.
             # zones, even to the quiet zone.
             self.setNeverDisable(0)
             self.setNeverDisable(0)
+
+            # This flag tells whether the object can be deleted right away,
+            # or not.
+            self.delayDeleteFlag = 0
+            # This flag tells whether a delete has been requested on this
+            # object.
+            self.deleteImminent = 0
         return None
         return None
 
 
     def setNeverDisable(self, bool):
     def setNeverDisable(self, bool):
@@ -24,6 +31,35 @@ class DistributedObject(PandaObject):
     def getNeverDisable(self):
     def getNeverDisable(self):
         return self.neverDisable
         return self.neverDisable
 
 
+    def deleteOrDelay(self):
+        if self.delayDeleteFlag:
+            self.deleteImminent = 1
+        else:
+            self.disableAnnounceAndDelete()
+        return None
+
+    def delayDelete(self, flag):
+        if self.delayDeleteFlag:
+            if flag:
+                self.notify.warning("Object: " + str(self.getDoId()) +
+                                    " is already in delayDelete mode")
+            else:
+                self.delayDeleteFlag = 0
+                if self.deleteImminent:
+                    self.disableAnnounceAndDelete()
+        else:
+            if flag:
+                self.delayDeleteFlag = 1
+            else:
+                self.notify.warning("Object: " + str(self.getDoId()) +
+                                    " is not in delayDelete mode")
+        return None
+
+    def disableAnnounceAndDelete(self):
+        self.disableAndAnnounce()
+        self.delete()
+        return None
+
     def disableAndAnnounce(self):
     def disableAndAnnounce(self):
         """disableAndAnnounce(self)
         """disableAndAnnounce(self)
         Inheritors should *not* redefine this function.
         Inheritors should *not* redefine this function.