aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/server
diff options
context:
space:
mode:
authorGravatar Doug Rabson <dfr@rabson.org>2015-08-13 14:41:50 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-08-14 20:06:43 +0000
commitd655f2a2870af33f0be3994a983d779e4ad1fb15 (patch)
tree030ca27b4f81ba5ab630e71ceaa1cd35322e0f08 /src/main/java/com/google/devtools/build/lib/server
parentf1eef673b5c8394c58afb755f5d8a08f546165c0 (diff)
Add a server.pid file for platforms where GetPeerProcessId is not supported
-- Change-Id: I36b096cfdf7b150121809ff5b07c74eac1cbf7ad Reviewed-on: https://bazel-review.git.corp.google.com/#/c/1771 MOS_MIGRATED_REVID=100573875
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/server')
-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.