@@ -47,7 +47,6 @@ OSBridge::MonoJavaGCBridgeInfo OSBridge::empty_bridge_info = {
4747 nullptr ,
4848 nullptr ,
4949 nullptr ,
50- nullptr ,
5150 nullptr
5251};
5352
@@ -81,7 +80,6 @@ OSBridge::clear_mono_java_gc_bridge_info ()
8180 info->handle = nullptr ;
8281 info->handle_type = nullptr ;
8382 info->refs_added = nullptr ;
84- info->weak_handle = nullptr ;
8583 }
8684}
8785
@@ -443,67 +441,6 @@ OSBridge::monodroid_disable_gc_hooks ()
443441 gc_disabled = 1 ;
444442}
445443
446- mono_bool
447- OSBridge::take_global_ref_2_1_compat (JNIEnv *env, MonoObject *obj)
448- {
449- jobject handle, weak;
450- int type = JNIGlobalRefType;
451-
452- MonoJavaGCBridgeInfo *bridge_info = get_gc_bridge_info_for_object (obj);
453- if (bridge_info == nullptr )
454- return 0 ;
455-
456- mono_field_get_value (obj, bridge_info->weak_handle , &weak);
457- handle = env->CallObjectMethod (weak, weakrefGet);
458- if (gref_log) {
459- fprintf (gref_log, " *try_take_global_2_1 obj=%p -> wref=%p handle=%p\n " , obj, weak, handle);
460- fflush (gref_log);
461- }
462- if (handle) {
463- void * h = env->NewGlobalRef (handle);
464- env->DeleteLocalRef (handle);
465- handle = reinterpret_cast <jobject> (h);
466- _monodroid_gref_log_new (weak, get_object_ref_type (env, weak),
467- handle, get_object_ref_type (env, handle), " finalizer" , gettid (), __PRETTY_FUNCTION__, 0 );
468- }
469- _monodroid_weak_gref_delete (weak, get_object_ref_type (env, weak), " finalizer" , gettid (), __PRETTY_FUNCTION__, 0 );
470- env->DeleteGlobalRef (weak);
471- weak = nullptr ;
472- mono_field_set_value (obj, bridge_info->weak_handle , &weak);
473-
474- mono_field_set_value (obj, bridge_info->handle , &handle);
475- mono_field_set_value (obj, bridge_info->handle_type , &type);
476- return handle != nullptr ;
477- }
478-
479- mono_bool
480- OSBridge::take_weak_global_ref_2_1_compat (JNIEnv *env, MonoObject *obj)
481- {
482- jobject weaklocal;
483- jobject handle, weakglobal;
484-
485- MonoJavaGCBridgeInfo *bridge_info = get_gc_bridge_info_for_object (obj);
486- if (bridge_info == nullptr )
487- return 0 ;
488-
489- mono_field_get_value (obj, bridge_info->handle , &handle);
490- weaklocal = env->NewObject (weakrefClass, weakrefCtor, handle);
491- weakglobal = env->NewGlobalRef (weaklocal);
492- env->DeleteLocalRef (weaklocal);
493- if (gref_log) {
494- fprintf (gref_log, " *take_weak_2_1 obj=%p -> wref=%p handle=%p\n " , obj, weakglobal, handle);
495- fflush (gref_log);
496- }
497- _monodroid_weak_gref_new (handle, get_object_ref_type (env, handle),
498- weakglobal, get_object_ref_type (env, weakglobal), " finalizer" , gettid (), __PRETTY_FUNCTION__, 0 );
499-
500- _monodroid_gref_log_delete (handle, get_object_ref_type (env, handle), " finalizer" , gettid (), __PRETTY_FUNCTION__, 0 );
501-
502- env->DeleteGlobalRef (handle);
503- mono_field_set_value (obj, bridge_info->weak_handle , &weakglobal);
504- return 1 ;
505- }
506-
507444mono_bool
508445OSBridge::take_global_ref_jni (JNIEnv *env, MonoObject *obj)
509446{
@@ -1001,58 +938,13 @@ OSBridge::gc_cross_references (int num_sccs, MonoGCBridgeSCC **sccs, int num_xre
1001938 set_bridge_processing_field (domains_list, 0 );
1002939}
1003940
1004- int
1005- OSBridge::platform_supports_weak_refs (void )
1006- {
1007- char *value;
1008- int api_level = 0 ;
1009-
1010- if (AndroidSystem::monodroid_get_system_property (" ro.build.version.sdk" , &value) > 0 ) {
1011- api_level = atoi (value);
1012- free (value);
1013- }
1014-
1015- if (AndroidSystem::monodroid_get_system_property (SharedConstants::DEBUG_MONO_WREF_PROPERTY, &value) > 0 ) {
1016- int use_weak_refs = 0 ;
1017- if (!strcmp (" jni" , value))
1018- use_weak_refs = 1 ;
1019- else if (!strcmp (" java" , value))
1020- use_weak_refs = 0 ;
1021- else {
1022- use_weak_refs = -1 ;
1023- log_warn (LOG_GC, " Unsupported debug.mono.wref value '%s'; "
1024- " supported values are 'jni' and 'java'. Ignoring..." ,
1025- value);
1026- }
1027- free (value);
1028-
1029- if (use_weak_refs && api_level < 8 )
1030- log_warn (LOG_GC, " Using JNI weak references instead of "
1031- " java.lang.WeakReference on API-%i. Are you sure you want to do this? "
1032- " The GC may be compromised." ,
1033- api_level);
1034-
1035- if (use_weak_refs >= 0 )
1036- return use_weak_refs;
1037- }
1038-
1039- return 1 ;
1040- }
1041-
1042941void
1043942OSBridge::register_gc_hooks (void )
1044943{
1045944 MonoGCBridgeCallbacks bridge_cbs;
1046945
1047- if (platform_supports_weak_refs ()) {
1048- take_global_ref = &OSBridge::take_global_ref_jni;
1049- take_weak_global_ref = &OSBridge::take_weak_global_ref_jni;
1050- log_info (LOG_GC, " environment supports jni NewWeakGlobalRef" );
1051- } else {
1052- take_global_ref = &OSBridge::take_global_ref_2_1_compat;
1053- take_weak_global_ref = &OSBridge::take_weak_global_ref_2_1_compat;
1054- log_info (LOG_GC, " environment does not support jni NewWeakGlobalRef" );
1055- }
946+ take_global_ref = &OSBridge::take_global_ref_jni;
947+ take_weak_global_ref = &OSBridge::take_weak_global_ref_jni;
1056948
1057949 bridge_cbs.bridge_version = SGEN_BRIDGE_VERSION;
1058950 bridge_cbs.bridge_class_kind = gc_bridge_class_kind_cb;
0 commit comments