Skip to content

Commit a3ea169

Browse files
authored
Move lru_cache definitions to __init__ (#30)
Using the lru_cache decorators on class methods, the ones that have a reference to `self`, will also cache self. So we move it to the __init__ of the class (DIS-2913)
1 parent 0b22e50 commit a3ea169

File tree

4 files changed

+8
-4
lines changed

4 files changed

+8
-4
lines changed

dissect/hypervisor/disk/qcow2.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ def __init__(self, fh, data_file=None, backing_file=None):
116116
if backing_file != ALLOW_NO_BACKING_FILE:
117117
self.backing_file = backing_file
118118

119+
self.l2_table = lru_cache(128)(self.l2_table)
120+
119121
super().__init__(self.header.size)
120122

121123
def _read_extensions(self):
@@ -167,7 +169,6 @@ def l1_table(self):
167169
self.fh.seek(self.header.l1_table_offset)
168170
return c_qcow2.uint64[self.header.l1_size](self.fh)
169171

170-
@lru_cache(maxsize=128)
171172
def l2_table(self, l2_offset):
172173
return L2Table(self, l2_offset)
173174

dissect/hypervisor/disk/vhd.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ def __init__(self, fh, offset, max_entries):
101101
self.offset = offset
102102
self.max_entries = max_entries
103103

104-
@lru_cache(4096)
104+
self.get = lru_cache(4096)(self.get)
105+
105106
def get(self, block):
106107
# This could be improved by caching the entire BAT (or chunks if too large)
107108
if block + 1 > self.max_entries:

dissect/hypervisor/disk/vhdx.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ def __init__(self, vhdx, offset):
206206
else:
207207
self.entry_count = self._pb_count + ((self._pb_count - 1) // self.chunk_ratio)
208208

209-
@lru_cache(4096)
209+
self.get = lru_cache(4096)(self.get)
210+
210211
def get(self, entry):
211212
"""Get a BAT entry."""
212213
if entry + 1 > self.entry_count:

dissect/hypervisor/disk/vmdk.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,8 @@ def __init__(self, fh, parent=None, offset=0, sector_offset=0):
199199
self.size = self.header.capacity * SECTOR_SIZE
200200
self.sector_count = self.header.capacity
201201

202-
@lru_cache(128)
202+
self._lookup_grain_table = lru_cache(128)(self._lookup_grain_table)
203+
203204
def _lookup_grain_table(self, directory):
204205
gtbl_offset = self._grain_directory[directory]
205206

0 commit comments

Comments
 (0)