public static void DisposeObject(ref CleanupNotifier.RegistrationToken token, object owner, bool delete) { object obj = CleanupNotifier.cleanupIdToContext; lock (obj) { CleanupNotifier.ObjectCleanupContext objectCleanupContext; if (CleanupNotifier.cleanupIdToContext.TryGetValue(token.Identifier, out objectCleanupContext)) { CleanupNotifier.DeleteContext(ref token); if (!CleanupNotifierBridge.GetAndDestroyNotifiedFlag(objectCleanupContext.NotifyObjectCPtr) && delete) { FirebaseApp.LogMessage(LogLevel.Debug, string.Format("{0} (instance 0x{1:X}) being deleted", objectCleanupContext.NotifyObjectType, (long)objectCleanupContext.NotifyObjectCPtr)); objectCleanupContext.DeleteObject(new HandleRef(owner, objectCleanupContext.NotifyObjectCPtr)); FirebaseApp.LogMessage(LogLevel.Debug, string.Format("{0} (instance 0x{1:X}) deleted", objectCleanupContext.NotifyObjectType, (long)objectCleanupContext.NotifyObjectCPtr)); } } } }
private static void PerformCleanup(IntPtr cleanupObjectCPtr, IntPtr notifyObjectCPtr, IntPtr context) { object obj = CleanupNotifier.cleanupIdToContext; lock (obj) { CleanupNotifier.ObjectCleanupContext objectCleanupContext; if (CleanupNotifier.cleanupIdToContext.TryGetValue((long)context, out objectCleanupContext)) { object notifyObject = objectCleanupContext.NotifyObject; if (notifyObject != null) { FirebaseApp.LogMessage(LogLevel.Debug, string.Format("{0} (instance 0x{1:X}) will be disposed", objectCleanupContext.NotifyObjectType, (long)objectCleanupContext.NotifyObjectCPtr)); CleanupNotifierBridge.GetAndDestroyNotifiedFlag(notifyObjectCPtr); objectCleanupContext.DisposeObject(notifyObject); } else { FirebaseApp.LogMessage(LogLevel.Debug, string.Format("{0} (instance 0x{1:X}) is being finalized, deleting object now", objectCleanupContext.NotifyObjectType, (long)objectCleanupContext.NotifyObjectCPtr)); objectCleanupContext.DeleteObject(new HandleRef(objectCleanupContext.NotifyObjectType, notifyObjectCPtr)); } } } }