Set GCROOT to store path to prevent garbage collection

This commit is contained in:
Matthew Kenigsberg 2020-04-27 11:12:54 -06:00
parent c9d0cf7e02
commit a3bc695e7d

View file

@ -200,13 +200,15 @@ struct Common : InstallableCommand, MixProfile
} }
} }
BuildEnvironment getBuildEnvironment(ref<Store> store) std::pair<BuildEnvironment, std::string> getBuildEnvironment(ref<Store> store)
{ {
auto shellOutPath = getShellOutPath(store); auto shellOutPath = getShellOutPath(store);
auto strPath = store->printStorePath(shellOutPath);
updateProfile(shellOutPath); updateProfile(shellOutPath);
return readEnvironment(store->printStorePath(shellOutPath)); return {readEnvironment(strPath), strPath};
} }
}; };
@ -253,7 +255,7 @@ struct CmdDevShell : Common, MixEnvironment
void run(ref<Store> store) override void run(ref<Store> store) override
{ {
auto buildEnvironment = getBuildEnvironment(store); auto [buildEnvironment, gcroot] = getBuildEnvironment(store);
auto [rcFileFd, rcFilePath] = createTempFile("nix-shell"); auto [rcFileFd, rcFilePath] = createTempFile("nix-shell");
@ -276,6 +278,7 @@ struct CmdDevShell : Common, MixEnvironment
auto shell = getEnv("SHELL").value_or("bash"); auto shell = getEnv("SHELL").value_or("bash");
setEnviron(); setEnviron();
setenv("GCROOT", gcroot.data(), 1);
auto args = Strings{std::string(baseNameOf(shell)), "--rcfile", rcFilePath}; auto args = Strings{std::string(baseNameOf(shell)), "--rcfile", rcFilePath};
@ -307,7 +310,7 @@ struct CmdPrintDevEnv : Common
void run(ref<Store> store) override void run(ref<Store> store) override
{ {
auto buildEnvironment = getBuildEnvironment(store); auto buildEnvironment = getBuildEnvironment(store).first;
stopProgressBar(); stopProgressBar();