aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java26
1 files changed, 11 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java
index e79b2abcd7..fdc4abfdd7 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java
@@ -35,9 +35,8 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne
return OS.isPosixCompatible() && ProcessWrapperUtil.isSupported(cmdEnv);
}
- private final Path processWrapper;
private final Path execRoot;
- private final Path sandboxBase;
+ private final Path processWrapper;
private final LocalEnvProvider localEnvProvider;
private final Duration timeoutKillDelay;
@@ -51,32 +50,29 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne
*/
ProcessWrapperSandboxedSpawnRunner(
CommandEnvironment cmdEnv, Path sandboxBase, String productName, Duration timeoutKillDelay) {
- super(cmdEnv);
- this.processWrapper = ProcessWrapperUtil.getProcessWrapper(cmdEnv);
+ super(cmdEnv, sandboxBase);
this.execRoot = cmdEnv.getExecRoot();
+ this.timeoutKillDelay = timeoutKillDelay;
+ this.processWrapper = ProcessWrapperUtil.getProcessWrapper(cmdEnv);
this.localEnvProvider =
OS.getCurrent() == OS.DARWIN
? new XcodeLocalEnvProvider(productName, cmdEnv.getClientEnv())
: new PosixLocalEnvProvider(cmdEnv.getClientEnv());
- this.sandboxBase = sandboxBase;
- this.timeoutKillDelay = timeoutKillDelay;
}
@Override
protected SpawnResult actuallyExec(Spawn spawn, SpawnExecutionPolicy policy)
throws ExecException, IOException, InterruptedException {
// Each invocation of "exec" gets its own sandbox.
- Path sandboxPath = sandboxBase.getRelative(Integer.toString(policy.getId()));
- sandboxPath.createDirectory();
-
- // b/64689608: The execroot of the sandboxed process must end with the workspace name, just like
- // the normal execroot does.
+ Path sandboxPath = getSandboxRoot();
Path sandboxExecRoot = sandboxPath.getRelative("execroot").getRelative(execRoot.getBaseName());
- sandboxExecRoot.getParentDirectory().createDirectory();
- sandboxExecRoot.createDirectory();
+
+ // Each sandboxed action runs in its own execroot, so we don't need to make the temp directory's
+ // name unique (like we have to with standalone execution strategy).
+ Path tmpDir = sandboxExecRoot.getRelative("tmp");
Map<String, String> environment =
- localEnvProvider.rewriteLocalEnv(spawn.getEnvironment(), execRoot, "/tmp");
+ localEnvProvider.rewriteLocalEnv(spawn.getEnvironment(), execRoot, tmpDir.getPathString());
Duration timeout = policy.getTimeout();
ProcessWrapperUtil.CommandLineBuilder commandLineBuilder =
@@ -101,7 +97,7 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne
SandboxHelpers.getOutputFiles(spawn),
getWritableDirs(sandboxExecRoot, environment));
- return runSpawn(spawn, sandbox, policy, execRoot, timeout, statisticsPath);
+ return runSpawn(spawn, sandbox, policy, execRoot, tmpDir, timeout, statisticsPath);
}
@Override