openjdk/jdk · error · IOException

No port file values materialized. Giving up after

Error message

No port file values materialized. Giving up after {} ms

What it means

IOException from PortFile.waitForValidValues(): the caller (typically a client after triggering server startup) polled lock/getValues/unlock for the port file until a per-call timeout elapsed, but the file never contained valid server connection values. The message reports the actual elapsed milliseconds spent waiting.

Solutions

  1. Increase the wait timeout so slow machine startup (cold JVM, loaded CI host) completes.
  2. Diagnose why the daemon never wrote values: run it in the foreground and watch its output.
  3. Clear stale port files and orphaned server processes before the build.
  4. Check for disk/filesystem latency on the port file directory.
Defensive patterns

Strategy: retry

Validate before calling

// before waiting, cheaply check the daemon is even alive
if (!serverProcess.isAlive())
    throw new IOException("javacserver daemon exited before writing the port file; see its output");

Try / catch

try {
    portFile.waitForValidValues(timeoutMs);
} catch (IOException e) {
    if (serverProcess.isAlive() && elapsed < hardLimit) {
        portFile.waitForValidValues(timeoutMs * 2); // one backoff retry on loaded hosts
    } else {
        killServerAndRemovePortFile(); // avoid poisoned state for the next client
        throw e;
    }
}

Prevention

When it happens

Trigger: Client starts a new javacserver and waits for the daemon to write its port into the shared port file; the daemon crashes before writing, or the values it writes are for a different server incarnation (mismatched cookie), so containsPortInfo never becomes true.

Common situations: Forked server dying at startup (see 'Server failed to initialize'); concurrent clients racing where one deletes the port file; slow or hung disks delaying the daemon's write past the timeout.

Related errors


AI-assisted analysis of openjdk/jdk@88dfb74bbe (2026-08-14). Data as JSON: /api/errors/27138870ae953209. Report an issue: GitHub.

Appendix: source

Thrown at make/langtools/tools/javacserver/shared/PortFile.java:260

        long startTime = System.currentTimeMillis();
        long timeout = startTime + getServerStartupTimeoutSeconds() * 1000;
        while (true) {
            Log.debug("Looking for valid port file values...");
            if (exists()) {
                lock();
                getValues();
                unlock();
            }
            if (containsPortInfo) {
                Log.debug("Valid port file values found after " + (System.currentTimeMillis() - startTime) + " ms");
                return;
            }
            if (System.currentTimeMillis() > timeout) {
                break;
            }
            Thread.sleep(MS_BETWEEN_ATTEMPTS);
        }
        throw new IOException("No port file values materialized. Giving up after " +
                                      (System.currentTimeMillis() - startTime) + " ms");
    }

    /**
     * Check if the portfile still contains my values, assuming that I am the server.
     */
    public boolean stillMyValues() throws IOException, FileNotFoundException, InterruptedException {
        for (;;) {
            try {
                lock();
                getValues();
                unlock();
                if (containsPortInfo) {
                    if (serverPort == myServerPort &&
                        serverCookie == myServerCookie) {
                        // Everything is ok.
                        return true;
                    }

View on GitHub (pinned to 88dfb74bbe)