sqrtloop.c 667 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include <math.h>
  3. #include <signal.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <linux/compiler.h>
  7. #include <sys/wait.h>
  8. #include "../tests.h"
  9. static volatile sig_atomic_t done;
  10. static void sighandler(int sig __maybe_unused)
  11. {
  12. done = 1;
  13. }
  14. static int __sqrtloop(int sec)
  15. {
  16. signal(SIGALRM, sighandler);
  17. alarm(sec);
  18. while (!done)
  19. (void)sqrt(rand());
  20. return 0;
  21. }
  22. static int sqrtloop(int argc, const char **argv)
  23. {
  24. int sec = 1;
  25. if (argc > 0)
  26. sec = atoi(argv[0]);
  27. switch (fork()) {
  28. case 0:
  29. return __sqrtloop(sec);
  30. case -1:
  31. return -1;
  32. default:
  33. wait(NULL);
  34. }
  35. return 0;
  36. }
  37. DEFINE_WORKLOAD(sqrtloop);