internal static void AddLocalReference(JniLocalReference value) { var localRefs = Info.Value.LocalReferences; var cur = localRefs [localRefs.Count - 1]; cur.Add(value); }
internal static bool IsHandleValid(JniLocalReference lref) { if (lref == null || lref.IsInvalid || lref.IsClosed) { return(false); } return(Info.Value.LocalReferences.FirstOrDefault(r => r.Contains(lref)) != null); }
internal static void LogCreateLocalRef(JniLocalReference value) { if (value == null || value.IsInvalid || value.IsClosed) { return; } var r = new JniObjectReference(value, JniObjectReferenceType.Local); LogCreateLocalRef(r); }
internal static void DeleteLocalReference(JniLocalReference value, IntPtr handle) { var localRefs = Info.Value.LocalReferences; var c = localRefs.FirstOrDefault(r => r.Contains(value)); if (c == null) { Runtime.ObjectReferenceManager.WriteLocalReferenceLine( "Deleting JNI local reference handle 0x{0} from wrong thread {1}! Ignoring...", handle.ToString("x"), Runtime.GetCurrentThreadDescription()); Runtime.ObjectReferenceManager.WriteLocalReferenceLine("{0}", System.Activator.CreateInstance(Type.GetType("System.Diagnostics.StackTrace"))); return; } c.Remove(value); var lref = new JniObjectReference(value, JniObjectReferenceType.Local); Runtime.ObjectReferenceManager.DeleteLocalReference(Info.Value, ref lref); value.SetHandleAsInvalid(); }