Example #1
0
        internal static void    AddLocalReference(JniLocalReference value)
        {
            var localRefs = Info.Value.LocalReferences;
            var cur       = localRefs [localRefs.Count - 1];

            cur.Add(value);
        }
Example #2
0
        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);
        }
Example #3
0
        internal static void    LogCreateLocalRef(JniLocalReference value)
        {
            if (value == null || value.IsInvalid || value.IsClosed)
            {
                return;
            }
            var r = new JniObjectReference(value, JniObjectReferenceType.Local);

            LogCreateLocalRef(r);
        }
Example #4
0
        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();
        }