From 93c205b81f74922cf9e03788aad569efc0b919f3 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Mon, 4 May 2020 17:35:53 +0200 Subject: [PATCH] Throw exception if pointer in PointerWrapper is accessed after dispose --- PkmnLibSharp/PointerWrapper.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/PkmnLibSharp/PointerWrapper.cs b/PkmnLibSharp/PointerWrapper.cs index e0dc841..0e7988c 100644 --- a/PkmnLibSharp/PointerWrapper.cs +++ b/PkmnLibSharp/PointerWrapper.cs @@ -5,7 +5,19 @@ namespace PkmnLibSharp { public abstract class PointerWrapper : IDisposable { - internal readonly IntPtr Ptr; + private readonly IntPtr _ptr; + internal IntPtr Ptr + { + get + { + if (_isDeleted) + { + throw new Exception("Pointer access after dispose detected. This is not legal, and will cause native exceptions."); + } + return _ptr; + } + } + private bool _isDeleted = false; private static readonly ConcurrentDictionary> Cached = @@ -13,7 +25,7 @@ namespace PkmnLibSharp protected PointerWrapper(IntPtr ptr) { - Ptr = ptr; + _ptr = ptr; var weakRef = new WeakReference(this); Cached.TryAdd(ptr, weakRef); }