]> arthur.barton.de Git - bup.git/commitdiff
io.mmap: init _bup_closed in __new__, not __init__
authorRob Browning <rlb@defaultvalue.org>
Fri, 24 Jun 2022 21:14:43 +0000 (16:14 -0500)
committerRob Browning <rlb@defaultvalue.org>
Sun, 14 Aug 2022 18:50:20 +0000 (13:50 -0500)
So that it's always set during __del__.  Otherwise it might not exist
if (for example) __new__ or the superclass methods throw an exception
before we get to __init__.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
lib/bup/io.py

index 79a6d83d5468c0e026a53415ce5dd91bf5d9bafc..e2fd410b3eb8b1eb444118acf06a8f8e88a8f62c 100644 (file)
@@ -22,14 +22,17 @@ class mmap(py_mmap.mmap):
     that aren't explicitly closed.
 
     '''
+    def __new__(cls, *args, **kwargs):
+        result = super().__new__(cls, *args, **kwargs)
+        result._bup_closed = True  # supports __del__
+        return result
 
     def __init__(self, *args, **kwargs):
-        self._bup_closed = True
         # Silence deprecation warnings.  mmap's current parent is
         # object, which accepts no params and as of at least 2.7
         # warns about them.
         if py_mmap.mmap.__init__ is not object.__init__:
-            super(mmap, self).__init__(self, *args, **kwargs)
+            super().__init__(self, *args, **kwargs)
         self._bup_closed = False
 
     def close(self):