anchor.diff:  /// the inherited variables.
   Future<PubProcess> startProcess(String executable, List<String> args,
       {workingDir, Map<String, String> environment}) {
  -  // TODO(nweiz): use _descriptorPool here.
  -  return _doProcess(Process.start, executable, args, workingDir, environment)
  -      .then((ioProcess) => new PubProcess(ioProcess));
  +  return _descriptorPool.request().then((resource) {
  +    return _doProcess(Process.start, executable, args, workingDir, environment)
  +        .then((ioProcess) {
  +      var process = new PubProcess(ioProcess);
  +      process.exitCode.whenComplete(resource.release);
  +      return process;
  +    });
  +  });
   }
   
   /// A wrapper around [Process] that exposes `dart:async`-style APIs.
  
positive.code: /// Writes [stream] to a new file at path [file]. Will replace any file already
  /// at that path. Completes when the file is done being written.
  Future<String> createFileFromStream(Stream<List<int>> stream, String file) {
    log.io("Creating $file from stream.");
  
    return _descriptorPool.withResource(() {
      return stream.pipe(new File(file).openWrite()).then((_) {
        log.fine("Created $file from stream.");
        return file;
      });
  
negative.code:       throw new Exception("Failed to extract .tar.gz stream to $destination "
            "(exit code $exitCode).");
      }
      log.fine("Extracted .tar.gz stream to $destination. Exit code $exitCode.");
    });
  }
  
  