@@ -47,7 +47,6 @@ OSBridge::MonoJavaGCBridgeInfo OSBridge::empty_bridge_info = {
47
47
nullptr ,
48
48
nullptr ,
49
49
nullptr ,
50
- nullptr ,
51
50
nullptr
52
51
};
53
52
@@ -81,7 +80,6 @@ OSBridge::clear_mono_java_gc_bridge_info ()
81
80
info->handle = nullptr ;
82
81
info->handle_type = nullptr ;
83
82
info->refs_added = nullptr ;
84
- info->weak_handle = nullptr ;
85
83
}
86
84
}
87
85
@@ -443,67 +441,6 @@ OSBridge::monodroid_disable_gc_hooks ()
443
441
gc_disabled = 1 ;
444
442
}
445
443
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
-
507
444
mono_bool
508
445
OSBridge::take_global_ref_jni (JNIEnv *env, MonoObject *obj)
509
446
{
@@ -1001,58 +938,13 @@ OSBridge::gc_cross_references (int num_sccs, MonoGCBridgeSCC **sccs, int num_xre
1001
938
set_bridge_processing_field (domains_list, 0 );
1002
939
}
1003
940
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
-
1042
941
void
1043
942
OSBridge::register_gc_hooks (void )
1044
943
{
1045
944
MonoGCBridgeCallbacks bridge_cbs;
1046
945
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;
1056
948
1057
949
bridge_cbs.bridge_version = SGEN_BRIDGE_VERSION;
1058
950
bridge_cbs.bridge_class_kind = gc_bridge_class_kind_cb;
0 commit comments