예제 #1
0
        internal jvmtiError GetObject(ObjectId objectId, out jobject @object)
        {
            @object = jobject.Null;

            lock (_objects)
            {
                jweak weak;
                if (!_objects.TryGetValue(objectId, out weak))
                {
                    jthread thread;
                    if (!_threads.TryGetValue((ThreadId)objectId, out thread))
                    {
                        jclass @class;
                        if (!_classes.TryGetValue((ReferenceTypeId)objectId, out @class))
                        {
                            return(jvmtiError.InvalidObject);
                        }

                        @object = @class;
                        return(jvmtiError.None);
                    }

                    @object = thread;
                    return(jvmtiError.None);
                }

                @object = new jobject(weak.Handle);
                return(jvmtiError.None);
            }
        }
예제 #2
0
        internal LocalObjectReferenceHolder GetLocalReferenceForObject(JniEnvironment nativeEnvironment, ObjectId objectId)
        {
            LocalObjectReferenceHolder thread;
            jvmtiError error = GetLocalReferenceForObject(nativeEnvironment, objectId, out thread);

            if (error != jvmtiError.None)
            {
                return(new LocalObjectReferenceHolder());
            }

            return(thread);
        }
예제 #3
0
        internal jvmtiError GetLocalReferenceForObject(JniEnvironment nativeEnvironment, ObjectId objectId, out LocalObjectReferenceHolder thread)
        {
            thread = default(LocalObjectReferenceHolder);

            jobject    threadHandle;
            jvmtiError error = GetObject(objectId, out threadHandle);

            if (error != jvmtiError.None)
            {
                return(error);
            }

            thread = new LocalObjectReferenceHolder(nativeEnvironment, threadHandle);
            return(jvmtiError.None);
        }