Skip to content

Commit

Permalink
use normal GENERATE_TRY_GET_CLASS_WITH_CACHE
Browse files Browse the repository at this point in the history
  • Loading branch information
lambdageek committed Jan 15, 2022
1 parent f83ecac commit 7250d36
Showing 1 changed file with 2 additions and 50 deletions.
52 changes: 2 additions & 50 deletions src/mono/mono/component/hot_reload.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,54 +150,6 @@ static MonoComponentHotReload fn_table = {
&hot_reload_find_method_by_name,
};

#define HR_GENERATE_GET_CLASS_WITH_CACHE_DECL(shortname) \
MonoClass* mono_class_get_##shortname##_class (void);

#define HR_GENERATE_TRY_GET_CLASS_WITH_CACHE_DECL(shortname) \
MonoClass* mono_class_try_get_##shortname##_class (void);

// GENERATE_GET_CLASS_WITH_CACHE attempts mono_class_load_from_name whenever
// its cache is null. i.e. potentially repeatedly, though it is expected to succeed
// the first time.
//
#define HR_GENERATE_GET_CLASS_WITH_CACHE(shortname,name_space,name) \
MonoClass* \
mono_class_get_##shortname##_class (void) \
{ \
static MonoClass *tmp_class; \
MonoClass *klass = tmp_class; \
if (!klass) { \
klass = mono_class_load_from_name (mono_get_corlib (), name_space, name); \
mono_memory_barrier (); /* FIXME excessive? */ \
tmp_class = klass; \
} \
return klass; \
}

// GENERATE_TRY_GET_CLASS_WITH_CACHE attempts mono_class_load_from_name approximately
// only once. i.e. if it fails, it will return null and not retry.
// In a race it might try a few times, but not indefinitely.
//
// FIXME This maybe has excessive volatile/barriers.
//
#define HR_GENERATE_TRY_GET_CLASS_WITH_CACHE(shortname,name_space,name) \
MonoClass* \
mono_class_try_get_##shortname##_class (void) \
{ \
static volatile MonoClass *tmp_class; \
static volatile gboolean inited; \
MonoClass *klass = (MonoClass *)tmp_class; \
mono_memory_barrier (); \
if (!inited) { \
klass = mono_class_try_load_from_name (mono_get_corlib (), name_space, name); \
tmp_class = klass; \
mono_memory_barrier (); \
inited = TRUE; \
} \
return klass; \
}


MonoComponentHotReload *
mono_component_hot_reload_init (void)
{
Expand Down Expand Up @@ -2519,9 +2471,9 @@ class_runtime_info_static_fields_unlock (MonoClassRuntimeMetadataUpdateInfo *run
mono_coop_mutex_unlock (&runtime_info->static_fields_lock);
}

static HR_GENERATE_GET_CLASS_WITH_CACHE_DECL (hot_reload_field_store);
static GENERATE_GET_CLASS_WITH_CACHE_DECL (hot_reload_field_store);

static HR_GENERATE_GET_CLASS_WITH_CACHE(hot_reload_field_store, "Mono.HotReload", "FieldStore");
static GENERATE_GET_CLASS_WITH_CACHE(hot_reload_field_store, "Mono.HotReload", "FieldStore");


static MonoObject*
Expand Down

0 comments on commit 7250d36

Please sign in to comment.