소스 검색

*** empty log message ***

Jesse Schell 25 년 전
부모
커밋
51ec5d8e95
2개의 변경된 파일39개의 추가작업 그리고 4개의 파일을 삭제
  1. 3 4
      direct/src/distributed/ClientRepository.py
  2. 36 0
      direct/src/distributed/DistributedObject.py

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

@@ -236,10 +236,9 @@ class ClientRepository(DirectObject.DirectObject):
             del(self.doId2cdc[doId])
             # Sanity check the dictionaries
             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.
         elif self.cache.contains(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
             # zones, even to the quiet zone.
             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
 
     def setNeverDisable(self, bool):
@@ -24,6 +31,35 @@ class DistributedObject(PandaObject):
     def getNeverDisable(self):
         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):
         """disableAndAnnounce(self)
         Inheritors should *not* redefine this function.