#pragma warning disable CS1591 protected unsafe override void Dispose(bool disposing) { IntPtr mem = (IntPtr)_instance; bool alive; lock (Scope) { alive = Scope.Remove(mem); } if (alive) { CefStructure.Free(mem); _instance = null; } }
#pragma warning disable CS1591 protected unsafe override void Dispose(bool disposing) { IntPtr key = Volatile.Read(ref _instance); if (key != IntPtr.Zero) { GlobalSyncRoot.EnterWriteLock(); try { if (CefApi.UseUnsafeImplementation) { RefCountedWrapperStruct *ws = GetWrapperStructPtr((void *)key); if (ws != null) { UnsafeRefCounted.Remove(ws->cppObject); } } RefCounted.Remove(key); } finally { GlobalSyncRoot.ExitWriteLock(); } #if NETFRAMEWORK if (Environment.HasShutdownStarted) { if (CefStructure.IsAllocated(key)) // allow leaks to fix potential UAF { return; } } else #endif if (CefStructure.Free(key)) { return; } base.Dispose(disposing); } }