diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc index 19087f657d..27d75faec2 100644 --- a/src/libstore/globals.cc +++ b/src/libstore/globals.cc @@ -118,5 +118,12 @@ unsigned int queryIntSetting(const string & name, unsigned int def) return n; } + +void reloadSettings() +{ + settingsRead = false; + settings.clear(); +} + } diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index 2eb68625a6..7e973025c9 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -107,6 +107,8 @@ bool queryBoolSetting(const string & name, bool def); unsigned int queryIntSetting(const string & name, unsigned int def); +void reloadSettings(); + } diff --git a/src/nix-worker/nix-worker.cc b/src/nix-worker/nix-worker.cc index dc9db0be42..1ba74f46fe 100644 --- a/src/nix-worker/nix-worker.cc +++ b/src/nix-worker/nix-worker.cc @@ -627,13 +627,17 @@ static void daemonLoop() case 0: try { /* child */ - + /* Background the worker. */ if (setsid() == -1) throw SysError(format("creating a new session")); /* Restore normal handling of SIGCHLD. */ setSigChldAction(false); + + /* Since the daemon can be long-running, the + settings may have changed. So force a reload. */ + reloadSettings(); /* Handle the connection. */ from.fd = remote;