Merge pull request #3542 from mkenigs/gcroots

Set GCROOT to store path to prevent garbage collection
This commit is contained in:
Eelco Dolstra 2020-04-28 21:04:06 +02:00 committed by GitHub
commit 06849c3090
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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 strPath = store->printStorePath(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
{
auto buildEnvironment = getBuildEnvironment(store);
auto [buildEnvironment, gcroot] = getBuildEnvironment(store);
auto [rcFileFd, rcFilePath] = createTempFile("nix-shell");
@ -276,6 +278,8 @@ struct CmdDevShell : Common, MixEnvironment
auto shell = getEnv("SHELL").value_or("bash");
setEnviron();
// prevent garbage collection until shell exits
setenv("NIX_GCROOT", gcroot.data(), 1);
auto args = Strings{std::string(baseNameOf(shell)), "--rcfile", rcFilePath};
@ -307,7 +311,7 @@ struct CmdPrintDevEnv : Common
void run(ref<Store> store) override
{
auto buildEnvironment = getBuildEnvironment(store);
auto buildEnvironment = getBuildEnvironment(store).first;
stopProgressBar();