Author: Armin Rigo <[email protected]>
Branch: refactor-wrapped-del
Changeset: r45496:a91ad10bc67e
Date: 2011-07-11 23:03 +0200
http://bitbucket.org/pypy/pypy/changeset/a91ad10bc67e/
Log: Use enqueue_for_destruction() in case close()ing the file fails. We
cannot nicely report the error immediately, because we are in an
RPython-level __del__.
diff --git a/pypy/module/_file/interp_file.py b/pypy/module/_file/interp_file.py
--- a/pypy/module/_file/interp_file.py
+++ b/pypy/module/_file/interp_file.py
@@ -33,6 +33,7 @@
encoding = None
errors = None
fd = -1
+ streamerror_upon_closing = None
newlines = 0 # Updated when the stream is closed
@@ -46,8 +47,14 @@
try:
self.direct_close()
except StreamErrors, e:
- operr = wrap_streamerror(self.space, e, self.w_name)
- operr.write_unraisable(self.space, '__del__ of ', self)
+ self.streamerror_upon_closing = e
+ self.enqueue_for_destruction(self.space, W_File.report_streamerror,
+ 'close() method of ')
+
+ def report_streamerror(self):
+ operr = wrap_streamerror(self.space, self.streamerror_upon_closing,
+ self.w_name)
+ raise operr
def fdopenstream(self, stream, fd, mode, w_name=None):
self.fd = fd
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit