The previous code could crash in __del__ if init's open() threw.
Thanks to Johannes Berg for reporting the issue.
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
class MetaStoreReader:
def __init__(self, filename):
- self._closed = False
self._file = None
self._file = open(filename, 'rb')
def close(self):
- self._closed = True
- if self._file:
- self._file.close()
- self._file = None
+ f, self._file = self._file, None
+ if f:
+ f.close()
def __del__(self):
- assert self._closed
+ assert not self._file
def __enter__(self):
return self