// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

import "dart:io";

void main(args) {
  int usr1Count = int.parse(args[0]);
  int usr2Count = int.parse(args[1]);
  var sub1;
  var sub2;
  void check() {
    if (usr1Count < 0 || usr2Count < 0) exit(1);
    if (usr1Count == 0 && usr2Count == 0) {
      sub1.cancel();
      sub2.cancel();
    }
    print("ready");
  }

  sub1 = ProcessSignal.sigusr1.watch().listen((signal) {
    if (signal != ProcessSignal.sigusr1) exit(1);
    usr1Count--;
    check();
  });
  sub2 = ProcessSignal.sigusr2.watch().listen((signal) {
    if (signal != ProcessSignal.sigusr2) exit(1);
    usr2Count--;
    check();
  });
  check();
}
