diff options
author | Doug Rabson <dfr@rabson.org> | 2015-08-13 14:41:50 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2015-08-14 20:06:43 +0000 |
commit | d655f2a2870af33f0be3994a983d779e4ad1fb15 (patch) | |
tree | 030ca27b4f81ba5ab630e71ceaa1cd35322e0f08 /src/main/java/com/google/devtools/build/lib/server | |
parent | f1eef673b5c8394c58afb755f5d8a08f546165c0 (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.java | 14 |
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. |