diff --git a/src/core/Akka/Actor/Settings.cs b/src/core/Akka/Actor/Settings.cs index 985983add5b..120663f5dae 100644 --- a/src/core/Akka/Actor/Settings.cs +++ b/src/core/Akka/Actor/Settings.cs @@ -13,6 +13,7 @@ using Akka.Dispatch; using Akka.Event; using Akka.Routing; +using Akka.Util; using ConfigurationFactory = Akka.Configuration.ConfigurationFactory; namespace Akka.Actor @@ -27,7 +28,7 @@ public class Settings { private readonly Config _userConfig; //internal static readonly Config AkkaDllConfig = ConfigurationFactory.FromResource("Akka.Configuration.Pigeon.conf"); - private Config _fallbackConfig; + private readonly AtomicReference _fallbackConfig; private void RebuildConfig() { @@ -42,13 +43,20 @@ private void RebuildConfig() /// /// Injects a system config at the top of the fallback chain /// - /// TBD + /// The latest config to be added to the front of the fallback chain public void InjectTopLevelFallback(Config config) { if (Config.Contains(config)) return; - _fallbackConfig = config.SafeWithFallback(_fallbackConfig); + while(true) + { + var oldConfig = _fallbackConfig.Value; + var newConfig = config.SafeWithFallback(oldConfig); + if (_fallbackConfig.CompareAndSet(oldConfig, newConfig)) + break; + } + RebuildConfig(); } @@ -77,7 +85,7 @@ public Settings(ActorSystem system, Config config, ActorSystemSetup setup) { Setup = setup; _userConfig = config; - _fallbackConfig = ConfigurationFactory.Default(); + _fallbackConfig = new AtomicReference(ConfigurationFactory.Default()); RebuildConfig(); System = system;