Correctly display the GCSettings specified in the runtimeconfig json via the GC Confi...
authorMukund Raghav Sharma (Moko) <68247673+mrsharm@users.noreply.github.com>
Thu, 6 Apr 2023 21:47:56 +0000 (14:47 -0700)
committerGitHub <noreply@github.com>
Thu, 6 Apr 2023 21:47:56 +0000 (14:47 -0700)
Fixes #84198 by honoring the user specified GC Configuration by appropriately setting the Configuration obtained from both the Environment Variables and the JSON Configuration.

src/coreclr/gc/gc.cpp
src/coreclr/gc/gcconfig.cpp
src/coreclr/gc/gcconfig.h

index 6097dfa2699baa0ff9452d280862c40a2ea21340..83969c30d4a14763fabf7d1c85c8d85d7c0fc4ed 100644 (file)
@@ -45388,7 +45388,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
index 9957e43dc5c5db36075fcc5890d318bedf37ee51..6112b1edc8b446dc70cd0a76b47c012b8e971f82 100644 (file)
 
 #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)
 
index 2b5f87b41f4cc3207370c94e00634e4e3e22a123..20338a35ec0e4a0ed658fd5ffa6431f0954d46d7 100644 (file)
@@ -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();