Selaa lähdekoodia

Fix destruction (issue https://trac.osgeo.org/grass/ticket/2616)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@64819 15284696-431f-4ddb-bdfa-cd5b030d7da7
Glynn Clements 10 vuotta sitten
vanhempi
commit
270f759899
1 muutettua tiedostoa jossa 17 lisäystä ja 14 poistoa
  1. 17 14
      lib/python/script/array.py

+ 17 - 14
lib/python/script/array.py

@@ -126,6 +126,15 @@ from grass.exceptions import CalledModuleError
 
 ###############################################################################
 
+class _tempfile(object):
+    def __init__(self):
+        self.filename = grass.tempfile()
+
+    def __del__(self):
+        try_remove(self.filename)
+
+###############################################################################
+
 class array(numpy.memmap):
     def __new__(cls, dtype=numpy.double):
         """Define new numpy array
@@ -138,22 +147,19 @@ class array(numpy.memmap):
         c = reg['cols']
         shape = (r, c)
 
-        filename = grass.tempfile()
+        tempfile = _tempfile()
 
         self = numpy.memmap.__new__(
             cls,
-            filename=filename,
+            filename=tempfile.filename,
             dtype=dtype,
             mode='w+',
             shape=shape)
 
-        self.filename = filename
+        self.tempfile = tempfile
+        self.filename = tempfile.filename
         return self
 
-    def __del__(self):
-        if isinstance(self, array):
-            try_remove(self.filename)
-
     def read(self, mapname, null=None):
         """Read raster map into array
 
@@ -259,23 +265,20 @@ class array3d(numpy.memmap):
         d = reg['depths']
         shape = (d, r, c)
 
-        filename = grass.tempfile()
+        tempfile = _tempfile()
 
         self = numpy.memmap.__new__(
             cls,
-            filename=filename,
+            filename=tempfile.filename,
             dtype=dtype,
             mode='w+',
             shape=shape)
 
-        self.filename = filename
+        self.tempfile = tempfile
+        self.filename = tempfile.filename
 
         return self
 
-    def __del__(self):
-        if isinstance(self, array3d):
-            try_remove(self.filename)
-
     def read(self, mapname, null=None):
         """Read 3D raster map into array