From 3d1d76d04b9e67489c05b4a0220afdcc7fe416e4 Mon Sep 17 00:00:00 2001 From: David Vierra Date: Mon, 5 Dec 2011 04:27:10 -1000 Subject: [PATCH] Revert "use weakrefs to break reference cycles between a world and its dimensions, and a world and its chunks." Weakrefs are the wrong solution, we need to remove the __del__ from MCInfdevOldLevel This reverts commit 12a5982b1693def30d74f9e656d87984e50fd8b1. --- infiniteworld.py | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/infiniteworld.py b/infiniteworld.py index 57bfa96..05b4612 100644 --- a/infiniteworld.py +++ b/infiniteworld.py @@ -13,7 +13,6 @@ import subprocess import sys import urllib import tempfile -import weakref from os.path import join, dirname, basename log = logging.getLogger(__name__) warn, error, info, debug = log.warn, log.error, log.info, log.debug @@ -637,16 +636,7 @@ class InfdevChunk(EntityLevel): else: if not world.containsChunk(*chunkPosition): raise ChunkNotPresent("Chunk {0} not found", self.chunkPosition) - - _world = None - @property - def world(self): - if self._world: - return self._world() - @world.setter - def world(self, val): - self._world = weakref.ref(val) - + @property def materials(self): return self.world.materials @@ -2241,8 +2231,6 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel): return self.bounds.size def close(self): - """ Immediately closes any filehandles opened by the world, discards all - changes and unloads all chunks and region files. """ for rf in (self.regionFiles or {}).values(): rf.close(); @@ -3059,7 +3047,7 @@ class MCInfdevOldLevel(ChunkedLevelMixin, EntityLevel): class MCAlphaDimension (MCInfdevOldLevel): def __init__(self, parentWorld, dimNo, create=False): filename = os.path.join(parentWorld.worldDir, "DIM" + str(int(dimNo))) - self._parentWorld = weakref.ref(parentWorld); + self.parentWorld = parentWorld; MCInfdevOldLevel.__init__(self, filename, create) self.dimNo = dimNo self.filename = parentWorld.filename @@ -3067,13 +3055,6 @@ class MCAlphaDimension (MCInfdevOldLevel): self.players = parentWorld.players self.playerTagCache = parentWorld.playerTagCache - _parentWorld = None - @property - def parentWorld(self): - if self._parentWorld: - return self._parentWorld() - - @property def root_tag(self): return self.parentWorld.root_tag;