diff --git a/src/coreclr/gc/gc.cpp b/src/coreclr/gc/gc.cpp index a85d28eb6a7396..d196609aca54ef 100644 --- a/src/coreclr/gc/gc.cpp +++ b/src/coreclr/gc/gc.cpp @@ -45356,7 +45356,8 @@ HRESULT GCHeap::Initialize() } gc_heap::regions_range = align_on_page(gc_heap::regions_range); } - // TODO: Set config after config API is merged. + + GCConfig::SetGCRegionRange(gc_heap::regions_range); #endif //USE_REGIONS #endif //HOST_64BIT diff --git a/src/coreclr/gc/gcconfig.cpp b/src/coreclr/gc/gcconfig.cpp index 9957e43dc5c5db..6112b1edc8b446 100644 --- a/src/coreclr/gc/gcconfig.cpp +++ b/src/coreclr/gc/gcconfig.cpp @@ -18,8 +18,13 @@ #define INT_CONFIG(name, unused_private_key, unused_public_key, default, unused_doc) \ int64_t GCConfig::Get##name() { return s_##name; } \ + int64_t GCConfig::Get##name(int64_t defaultValue) \ + { \ + return s_##name##Provided ? s_##name : defaultValue; \ + } \ void GCConfig::Set##name(int64_t value) { s_Updated##name = value; } \ int64_t GCConfig::s_##name = default; \ + bool GCConfig::s_##name##Provided = false; \ int64_t GCConfig::s_Updated##name = default; // String configs are not cached because 1) they are rare and @@ -64,11 +69,13 @@ GC_CONFIGURATION_KEYS void GCConfig::Initialize() { -#define BOOL_CONFIG(name, private_key, public_key, unused_default, unused_doc) \ - s_##name##Provided = GCToEEInterface::GetBooleanConfigValue(private_key, public_key, &s_##name); - -#define INT_CONFIG(name, private_key, public_key, unused_default, unused_doc) \ - GCToEEInterface::GetIntConfigValue(private_key, public_key, &s_##name); +#define BOOL_CONFIG(name, private_key, public_key, unused_default, unused_doc) \ + s_##name##Provided = GCToEEInterface::GetBooleanConfigValue(private_key, public_key, &s_##name); \ + s_Updated##name = s_##name; + +#define INT_CONFIG(name, private_key, public_key, unused_default, unused_doc) \ + s_##name##Provided = GCToEEInterface::GetIntConfigValue(private_key, public_key, &s_##name); \ + s_Updated##name = s_##name; \ #define STRING_CONFIG(unused_name, unused_private_key, unused_public_key, unused_doc) diff --git a/src/coreclr/gc/gcconfig.h b/src/coreclr/gc/gcconfig.h index 2b5f87b41f4cc3..20338a35ec0e4a 100644 --- a/src/coreclr/gc/gcconfig.h +++ b/src/coreclr/gc/gcconfig.h @@ -151,9 +151,11 @@ class GCConfig #define INT_CONFIG(name, unused_private_key, unused_public_key, unused_default, unused_doc) \ public: static int64_t Get##name(); \ + public: static int64_t Get##name(int64_t defaultValue); \ public: static void Set##name(int64_t value); \ private: static int64_t s_##name; \ - private: static int64_t s_Updated##name; + private: static bool s_##name##Provided; \ + private: static int64_t s_Updated##name; \ #define STRING_CONFIG(name, unused_private_key, unused_public_key, unused_doc) \ public: static GCConfigStringHolder Get##name();