From 883e7729f4071d868728e6574d21f84fcd646c49 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 25 Sep 2017 00:07:51 -0700 Subject: [PATCH] Python: Better protect stuff that gets gc'd --- src/platform/python/mgba/core.py | 5 +++++ src/platform/python/mgba/gb.py | 3 ++- src/platform/python/mgba/gba.py | 3 ++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/platform/python/mgba/core.py b/src/platform/python/mgba/core.py index 8b7abbf84..837f4188f 100644 --- a/src/platform/python/mgba/core.py +++ b/src/platform/python/mgba/core.py @@ -105,8 +105,13 @@ class Core(object): self._core.addCoreCallbacks(self._core, self._callbacks.context) self.config = Config(ffi.addressof(native.config)) + def __del__(self): + self._wasReset = False + @cached_property def graphicsCache(self): + if not self._wasReset: + raise RuntimeError("Core must be reset first") return tile.CacheSet(self) @cached_property diff --git a/src/platform/python/mgba/gb.py b/src/platform/python/mgba/gb.py index bd629922d..f70f9173f 100644 --- a/src/platform/python/mgba/gb.py +++ b/src/platform/python/mgba/gb.py @@ -32,8 +32,9 @@ class GB(Core): lib.GBVideoCacheAssociate(cache, ffi.addressof(self._native.video)) def _deinitCache(self, cache): - self._native.video.renderer.cache = ffi.NULL lib.mCacheSetDeinit(cache) + if self._wasReset: + self._native.video.renderer.cache = ffi.NULL def reset(self): super(GB, self).reset() diff --git a/src/platform/python/mgba/gba.py b/src/platform/python/mgba/gba.py index 2cec1ec42..bbe544683 100644 --- a/src/platform/python/mgba/gba.py +++ b/src/platform/python/mgba/gba.py @@ -40,8 +40,9 @@ class GBA(Core): lib.GBAVideoCacheAssociate(cache, ffi.addressof(self._native.video)) def _deinitCache(self, cache): - self._native.video.renderer.cache = ffi.NULL lib.mCacheSetDeinit(cache) + if self._wasReset: + self._native.video.renderer.cache = ffi.NULL def reset(self): super(GBA, self).reset()