aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/server/RPCServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/server/RPCServer.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/server/RPCServer.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/server/RPCServer.java b/src/main/java/com/google/devtools/build/lib/server/RPCServer.java
index a1e9982a73..903ef567a7 100644
--- a/src/main/java/com/google/devtools/build/lib/server/RPCServer.java
+++ b/src/main/java/com/google/devtools/build/lib/server/RPCServer.java
@@ -26,10 +26,12 @@ import com.google.devtools.build.lib.unix.LocalClientSocket;
import com.google.devtools.build.lib.unix.LocalServerSocket;
import com.google.devtools.build.lib.unix.LocalSocketAddress;
import com.google.devtools.build.lib.util.Clock;
+import com.google.devtools.build.lib.util.OsUtils;
import com.google.devtools.build.lib.util.ThreadUtils;
import com.google.devtools.build.lib.util.io.OutErr;
import com.google.devtools.build.lib.util.io.StreamMultiplexer;
import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
import java.io.InputStream;
@@ -365,6 +367,18 @@ public final class RPCServer {
ensureExclusiveAccess(socketFile);
+ // We create the server.pid file strictly before binding the socket.
+ // The client only accesses the pid file after connecting to the socket
+ // which ensures that it gets the correct pid value.
+ Path pidFile = serverDirectory.getRelative("server.pid");
+ deleteAtExit(pidFile, /*deleteParent=*/ false);
+ try {
+ pidFile.delete();
+ } catch (IOException e) {
+ // Ignore.
+ }
+ pidFile.createSymbolicLink(new PathFragment(String.valueOf(OsUtils.getpid())));
+
LocalServerSocket serverSocket = new LocalServerSocket();
serverSocket.bind(new LocalSocketAddress(socketFile.getPathFile()));
FilesystemUtils.chmod(socketFile.getPathFile(), 0600); // Lock it down.