private int runAsPersistentWorker()

in java/io/bazel/rules/closure/worker/PersistentWorker.java [123:160]


  private int runAsPersistentWorker() throws IOException, InterruptedException {
    InputStream realStdIn = System.in;
    PrintStream realStdOut = System.out;
    PrintStream realStdErr = System.err;
    try (InputStream emptyIn = new ByteArrayInputStream(new byte[0]);
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        PrintStream ps = new PrintStream(buffer)) {
      System.setIn(emptyIn);
      System.setOut(ps);
      System.setErr(ps);
      while (true) {
        WorkRequest request = WorkRequest.parseDelimitedFrom(realStdIn);
        if (request == null) {
          return 0;
        }
        for (Input input : request.getInputsList()) {
          inputDigests.put(
              fs.getPath(input.getPath()), HashCode.fromBytes(input.getDigest().toByteArray()));
        }
        arguments.addAll(request.getArgumentsList());
        loadArguments(true);
        int exitCode = runProgram(ps, Collections.unmodifiableMap(inputDigests));
        WorkResponse.newBuilder()
            .setOutput(new String(buffer.toByteArray(), UTF_8))
            .setExitCode(exitCode)
            .build()
            .writeDelimitedTo(realStdOut);
        realStdOut.flush();
        buffer.reset();
        arguments.clear();
        inputDigests.clear();
      }
    } finally {
      System.setIn(realStdIn);
      System.setOut(realStdOut);
      System.setErr(realStdErr);
    }
  }