diff options
Diffstat (limited to 'python/binaryview.py')
| -rw-r--r-- | python/binaryview.py | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/python/binaryview.py b/python/binaryview.py index 1baeab2b..66c30d06 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -735,7 +735,6 @@ class BinaryView(object): _registered_instances = [] def __init__(self, file_metadata=None, parent_view=None, handle=None): - self._must_free = True if handle is not None: self.handle = core.handle_of_type(handle, core.BNBinaryView) if file_metadata is None: @@ -755,7 +754,8 @@ class BinaryView(object): self._cb = core.BNCustomBinaryView() self._cb.context = 0 self._cb.init = self._cb.init.__class__(self._init) - self._cb.freeObject = self._cb.freeObject.__class__(self._free_object) + self._cb.externalRefTaken = self._cb.externalRefTaken.__class__(self._external_ref_taken) + self._cb.externalRefReleased = self._cb.externalRefReleased.__class__(self._external_ref_released) self._cb.read = self._cb.read.__class__(self._read) self._cb.write = self._cb.write.__class__(self._write) self._cb.insert = self._cb.insert.__class__(self._insert) @@ -778,8 +778,6 @@ class BinaryView(object): if parent_view is not None: parent_view = parent_view.handle self.handle = core.BNCreateCustomBinaryView(self.__class__.name, file_metadata.handle, parent_view, self._cb) - self.__class__._registered_instances.append(self) - self._must_free = False self.notifications = {} self.next_address = None # Do NOT try to access view before init() is called, use placeholder @@ -925,8 +923,7 @@ class BinaryView(object): def __del__(self): for i in self.notifications.values(): i._unregister() - if self._must_free: - core.BNFreeBinaryView(self.handle) + core.BNFreeBinaryView(self.handle) def __iter__(self): count = ctypes.c_ulonglong(0) @@ -1388,7 +1385,13 @@ class BinaryView(object): log.log_error(traceback.format_exc()) return False - def _free_object(self, ctxt): + def _external_ref_taken(self, ctxt): + try: + self.__class__._registered_instances.append(self) + except: + log.log_error(traceback.format_exc()) + + def _external_ref_released(self, ctxt): try: self.__class__._registered_instances.remove(self) except: |
