@@ -60,10 +60,6 @@ struct JavaInteropGCBridge {
6060 jobject Runtime_instance;
6161 jmethodID Runtime_gc;
6262
63- jclass WeakReference_class;
64- jmethodID WeakReference_init;
65- jmethodID WeakReference_get;
66-
6763 jclass GCUserPeerable_class;
6864 jmethodID GCUserPeerable_add;
6965 jmethodID GCUserPeerable_clear;
@@ -106,12 +102,9 @@ java_interop_gc_bridge_destroy (JavaInteropGCBridge *bridge)
106102 JNIEnv *env = ensure_jnienv (bridge);
107103 if (env != NULL ) {
108104 env->DeleteGlobalRef (bridge->Runtime_instance );
109- env->DeleteGlobalRef (bridge->WeakReference_class );
110105 env->DeleteGlobalRef (bridge->GCUserPeerable_class );
111106
112- bridge->Runtime_instance = NULL ;
113- bridge->WeakReference_class = NULL ;
114-
107+ bridge->Runtime_instance = NULL ;
115108 bridge->GCUserPeerable_class = NULL ;
116109 }
117110
@@ -277,13 +270,6 @@ java_interop_gc_bridge_new (JavaVM *jvm)
277270 env->DeleteLocalRef (Runtime_class);
278271 }
279272
280- jclass WeakReference_class = env->FindClass (" java/lang/ref/WeakReference" );
281- if (WeakReference_class != NULL ) {
282- bridge.WeakReference_init = env->GetMethodID (WeakReference_class, " <init>" , " (Ljava/lang/Object;)V" );
283- bridge.WeakReference_get = env->GetMethodID (WeakReference_class, " get" , " ()Ljava/lang/Object;" );
284- bridge.WeakReference_class = static_cast <jclass>(lref_to_gref (env, WeakReference_class));
285- }
286-
287273 jclass GCUserPeerable_class = env->FindClass (" net/dot/jni/GCUserPeerable" );
288274 if (GCUserPeerable_class) {
289275 bridge.GCUserPeerable_add = env->GetMethodID (GCUserPeerable_class, " jiAddManagedReference" , " (Ljava/lang/Object;)V" );
@@ -295,8 +281,7 @@ java_interop_gc_bridge_new (JavaVM *jvm)
295281 JavaInteropGCBridge *p = static_cast <JavaInteropGCBridge*>(calloc (1 , sizeof (JavaInteropGCBridge)));
296282
297283 if (p == NULL || bridge.jvm == NULL ||
298- bridge.Runtime_instance == NULL || bridge.Runtime_gc == NULL ||
299- bridge.WeakReference_class == NULL || bridge.WeakReference_init == NULL || bridge.WeakReference_get == NULL ) {
284+ bridge.Runtime_instance == NULL || bridge.Runtime_gc == NULL ) {
300285 java_interop_gc_bridge_destroy (&bridge);
301286 free (p);
302287 return NULL ;
@@ -772,72 +757,8 @@ get_gc_bridge_info_for_object (JavaInteropGCBridge *bridge, MonoObject *object)
772757 return get_gc_bridge_info_for_class (bridge, mono_object_get_class (object));
773758}
774759
775- typedef mono_bool (*MonodroidGCTakeRefFunc) (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj, const char *thread_name, int64_t thread_id);
776-
777- static MonodroidGCTakeRefFunc take_global_ref;
778- static MonodroidGCTakeRefFunc take_weak_global_ref;
779-
780- static mono_bool
781- take_global_ref_java (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj, const char *thread_name, int64_t thread_id)
782- {
783- MonoJavaGCBridgeInfo *bridge_info = get_gc_bridge_info_for_object (bridge, obj);
784- if (bridge_info == NULL )
785- return 0 ;
786-
787- jobject weak;
788- mono_field_get_value (obj, bridge_info->weak_handle , &weak);
789-
790- jobject handle = env->CallObjectMethod (weak, bridge->WeakReference_get );
791- log_gref (bridge, " *try_take_global_2_1 obj=%p -> wref=%p handle=%p\n " , obj, weak, handle);
792-
793- if (handle) {
794- jobject h = env->NewGlobalRef (handle);
795- env->DeleteLocalRef (handle);
796- handle = h;
797- java_interop_gc_bridge_gref_log_new (bridge, weak, get_object_ref_type (env, weak),
798- handle, get_object_ref_type (env, handle), thread_name, thread_id, " take_global_ref_java" );
799- }
800- java_interop_gc_bridge_weak_gref_log_delete (bridge, weak, get_object_ref_type (env, weak), thread_name, thread_id, " take_global_ref_java" );
801- env->DeleteGlobalRef (weak);
802- weak = NULL ;
803- mono_field_set_value (obj, bridge_info->weak_handle , &weak);
804-
805- mono_field_set_value (obj, bridge_info->handle , &handle);
806-
807- int type = JNIGlobalRefType;
808- mono_field_set_value (obj, bridge_info->handle_type , &type);
809-
810- return handle != NULL ;
811- }
812-
813- static mono_bool
814- take_weak_global_ref_java (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj, const char *thread_name, int64_t thread_id)
815- {
816- MonoJavaGCBridgeInfo *bridge_info = get_gc_bridge_info_for_object (bridge, obj);
817- if (bridge_info == NULL )
818- return 0 ;
819-
820- jobject handle;
821- mono_field_get_value (obj, bridge_info->handle , &handle);
822-
823- jobject weaklocal = env->NewObject (bridge->WeakReference_class , bridge->WeakReference_init , handle);
824- jobject weakglobal = env->NewGlobalRef (weaklocal);
825- env->DeleteLocalRef (weaklocal);
826-
827- log_gref (bridge, " *take_weak_2_1 obj=%p -> wref=%p handle=%p\n " , obj, weakglobal, handle);
828- java_interop_gc_bridge_weak_gref_log_new (bridge, handle, get_object_ref_type (env, handle),
829- weakglobal, get_object_ref_type (env, weakglobal), thread_name, thread_id, " take_weak_global_ref_2_1_compat" );
830-
831- java_interop_gc_bridge_gref_log_delete (bridge, handle, get_object_ref_type (env, handle), thread_name, thread_id, " take_weak_global_ref_2_1_compat" );
832- env->DeleteGlobalRef (handle);
833-
834- mono_field_set_value (obj, bridge_info->weak_handle , &weakglobal);
835-
836- return 1 ;
837- }
838-
839760static mono_bool
840- take_global_ref_jni (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj, const char *thread_name, int64_t thread_id)
761+ take_global_ref (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj, const char *thread_name, int64_t thread_id)
841762{
842763 MonoJavaGCBridgeInfo *bridge_info = get_gc_bridge_info_for_object (bridge, obj);
843764 if (bridge_info == NULL )
@@ -853,11 +774,11 @@ take_global_ref_jni (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj,
853774 java_interop_gc_bridge_gref_log_new (bridge, weak, get_object_ref_type (env, weak),
854775 handle, get_object_ref_type (env, handle),
855776 thread_name, thread_id,
856- " take_global_ref_jni " );
777+ " take_global_ref " );
857778 }
858779
859780 java_interop_gc_bridge_weak_gref_log_delete (bridge, weak, ' W' ,
860- thread_name, thread_id, " take_global_ref_jni " );
781+ thread_name, thread_id, " take_global_ref " );
861782 env->DeleteWeakGlobalRef (weak);
862783
863784 mono_field_set_value (obj, bridge_info->handle , &handle);
@@ -868,7 +789,7 @@ take_global_ref_jni (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj,
868789}
869790
870791static mono_bool
871- take_weak_global_ref_jni (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj, const char *thread_name, int64_t thread_id)
792+ take_weak_global_ref (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj, const char *thread_name, int64_t thread_id)
872793{
873794 MonoJavaGCBridgeInfo *bridge_info = get_gc_bridge_info_for_object (bridge, obj);
874795 if (bridge_info == NULL )
@@ -882,10 +803,10 @@ take_weak_global_ref_jni (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *
882803 jobject weak = env->NewWeakGlobalRef (handle);
883804 java_interop_gc_bridge_weak_gref_log_new (bridge, handle, get_object_ref_type (env, handle),
884805 weak, get_object_ref_type (env, weak),
885- thread_name, thread_id, " take_weak_global_ref_jni " );
806+ thread_name, thread_id, " take_weak_global_ref " );
886807
887808 java_interop_gc_bridge_gref_log_delete (bridge, handle, get_object_ref_type (env, handle),
888- thread_name, thread_id, " take_weak_global_ref_jni " );
809+ thread_name, thread_id, " take_weak_global_ref " );
889810 env->DeleteGlobalRef (handle);
890811
891812 mono_field_set_value (obj, bridge_info->handle , &weak);
@@ -1272,7 +1193,7 @@ gc_cross_references (int num_sccs, MonoGCBridgeSCC **sccs, int num_xrefs, MonoGC
12721193}
12731194
12741195int
1275- java_interop_gc_bridge_register_hooks (JavaInteropGCBridge *bridge, int weak_ref_kind)
1196+ java_interop_gc_bridge_register_hooks (JavaInteropGCBridge *bridge, [[maybe_unused]] int weak_ref_kind)
12761197{
12771198 if (bridge == NULL )
12781199 return -1 ;
@@ -1284,23 +1205,6 @@ java_interop_gc_bridge_register_hooks (JavaInteropGCBridge *bridge, int weak_ref
12841205 MonoGCBridgeCallbacks bridge_cbs;
12851206 memset (&bridge_cbs, 0 , sizeof (bridge_cbs));
12861207
1287- switch (weak_ref_kind) {
1288- case JAVA_INTEROP_GC_BRIDGE_USE_WEAK_REFERENCE_KIND_JAVA:
1289- message = " Using java.lang.ref.WeakReference for JNI Weak References." ;
1290- take_global_ref = take_global_ref_java;
1291- take_weak_global_ref = take_weak_global_ref_java;
1292- break ;
1293- case JAVA_INTEROP_GC_BRIDGE_USE_WEAK_REFERENCE_KIND_JNI:
1294- message = " Using JNIEnv::NewWeakGlobalRef() for JNI Weak References." ;
1295- take_global_ref = take_global_ref_jni;
1296- take_weak_global_ref = take_weak_global_ref_jni;
1297- break ;
1298- default :
1299- return -1 ;
1300- }
1301-
1302- log_gref (mono_bridge, " %s\n " , message);
1303-
13041208 bridge_cbs.bridge_version = SGEN_BRIDGE_VERSION;
13051209 bridge_cbs.bridge_class_kind = gc_bridge_class_kind;
13061210 bridge_cbs.is_bridge_object = gc_is_bridge_object;
0 commit comments