summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/tempfile.py10
-rw-r--r--Lib/test/test_tempfile.py10
2 files changed, 16 insertions, 4 deletions
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index f1d53db..96245d8 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -131,14 +131,16 @@ class TemporaryFileWrapper:
def __init__(self, file, path):
self.file = file
self.path = path
+ self.close_called = 0
def close(self):
- self.file.close()
- os.unlink(self.path)
+ if not self.close_called:
+ self.close_called = 1
+ self.file.close()
+ os.unlink(self.path)
def __del__(self):
- try: self.close()
- except: pass
+ self.close()
def __getattr__(self, name):
file = self.__dict__['file']
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
new file mode 100644
index 0000000..286e79c
--- /dev/null
+++ b/Lib/test/test_tempfile.py
@@ -0,0 +1,10 @@
+# SF bug #476138: tempfile behavior across platforms
+# Ensure that a temp file can be closed any number of times without error.
+
+import tempfile
+
+f = tempfile.TemporaryFile("w+b")
+f.write('abc\n')
+f.close()
+f.close()
+f.close()