@@ -60,10 +60,6 @@ struct JavaInteropGCBridge {
60
60
jobject Runtime_instance;
61
61
jmethodID Runtime_gc;
62
62
63
- jclass WeakReference_class;
64
- jmethodID WeakReference_init;
65
- jmethodID WeakReference_get;
66
-
67
63
jclass GCUserPeerable_class;
68
64
jmethodID GCUserPeerable_add;
69
65
jmethodID GCUserPeerable_clear;
@@ -106,12 +102,9 @@ java_interop_gc_bridge_destroy (JavaInteropGCBridge *bridge)
106
102
JNIEnv *env = ensure_jnienv (bridge);
107
103
if (env != NULL ) {
108
104
env->DeleteGlobalRef (bridge->Runtime_instance );
109
- env->DeleteGlobalRef (bridge->WeakReference_class );
110
105
env->DeleteGlobalRef (bridge->GCUserPeerable_class );
111
106
112
- bridge->Runtime_instance = NULL ;
113
- bridge->WeakReference_class = NULL ;
114
-
107
+ bridge->Runtime_instance = NULL ;
115
108
bridge->GCUserPeerable_class = NULL ;
116
109
}
117
110
@@ -277,13 +270,6 @@ java_interop_gc_bridge_new (JavaVM *jvm)
277
270
env->DeleteLocalRef (Runtime_class);
278
271
}
279
272
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
-
287
273
jclass GCUserPeerable_class = env->FindClass (" net/dot/jni/GCUserPeerable" );
288
274
if (GCUserPeerable_class) {
289
275
bridge.GCUserPeerable_add = env->GetMethodID (GCUserPeerable_class, " jiAddManagedReference" , " (Ljava/lang/Object;)V" );
@@ -295,8 +281,7 @@ java_interop_gc_bridge_new (JavaVM *jvm)
295
281
JavaInteropGCBridge *p = static_cast <JavaInteropGCBridge*>(calloc (1 , sizeof (JavaInteropGCBridge)));
296
282
297
283
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 ) {
300
285
java_interop_gc_bridge_destroy (&bridge);
301
286
free (p);
302
287
return NULL ;
@@ -772,72 +757,8 @@ get_gc_bridge_info_for_object (JavaInteropGCBridge *bridge, MonoObject *object)
772
757
return get_gc_bridge_info_for_class (bridge, mono_object_get_class (object));
773
758
}
774
759
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
-
839
760
static 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)
841
762
{
842
763
MonoJavaGCBridgeInfo *bridge_info = get_gc_bridge_info_for_object (bridge, obj);
843
764
if (bridge_info == NULL )
@@ -853,11 +774,11 @@ take_global_ref_jni (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj,
853
774
java_interop_gc_bridge_gref_log_new (bridge, weak, get_object_ref_type (env, weak),
854
775
handle, get_object_ref_type (env, handle),
855
776
thread_name, thread_id,
856
- " take_global_ref_jni " );
777
+ " take_global_ref " );
857
778
}
858
779
859
780
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 " );
861
782
env->DeleteWeakGlobalRef (weak);
862
783
863
784
mono_field_set_value (obj, bridge_info->handle , &handle);
@@ -868,7 +789,7 @@ take_global_ref_jni (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *obj,
868
789
}
869
790
870
791
static 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)
872
793
{
873
794
MonoJavaGCBridgeInfo *bridge_info = get_gc_bridge_info_for_object (bridge, obj);
874
795
if (bridge_info == NULL )
@@ -882,10 +803,10 @@ take_weak_global_ref_jni (JavaInteropGCBridge *bridge, JNIEnv *env, MonoObject *
882
803
jobject weak = env->NewWeakGlobalRef (handle);
883
804
java_interop_gc_bridge_weak_gref_log_new (bridge, handle, get_object_ref_type (env, handle),
884
805
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 " );
886
807
887
808
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 " );
889
810
env->DeleteGlobalRef (handle);
890
811
891
812
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
1272
1193
}
1273
1194
1274
1195
int
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)
1276
1197
{
1277
1198
if (bridge == NULL )
1278
1199
return -1 ;
@@ -1284,23 +1205,6 @@ java_interop_gc_bridge_register_hooks (JavaInteropGCBridge *bridge, int weak_ref
1284
1205
MonoGCBridgeCallbacks bridge_cbs;
1285
1206
memset (&bridge_cbs, 0 , sizeof (bridge_cbs));
1286
1207
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
-
1304
1208
bridge_cbs.bridge_version = SGEN_BRIDGE_VERSION;
1305
1209
bridge_cbs.bridge_class_kind = gc_bridge_class_kind;
1306
1210
bridge_cbs.is_bridge_object = gc_is_bridge_object;
0 commit comments