Browse Source

Add a simple exerciser to really run ps a lot

It works fine but execl in libs is broken -- more varargs fine.

This reliably crashes the kernel.

Change-Id: I3101885d5bc2a671d326a55db88e17f4e1eed3ea
Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Ronald G. Minnich 8 years ago
parent
commit
53a797d937
1 changed files with 45 additions and 0 deletions
  1. 45 0
      sys/src/regress/psx.c

+ 45 - 0
sys/src/regress/psx.c

@@ -0,0 +1,45 @@
+/*
+ * This file is part of the UCB release of Plan 9. It is subject to the license
+ * terms in the LICENSE file found in the top-level directory of this
+ * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
+ * part of the UCB release of Plan 9, including this file, may be copied,
+ * modified, propagated, or distributed except according to the terms contained
+ * in the LICENSE file.
+ */
+
+#include <u.h>
+#include <libc.h>
+
+int main(int argc, char *argv[])
+{
+	int iter = 1000, i;
+	Waitmsg *w;
+
+	if (argc > 1)
+		iter = strtoul(argv[1], 0, 0);
+	for(i = 0; i < iter; i++) {
+		int pid;
+		pid = fork();
+		if (pid < 0) {
+			print("FAIL\n");
+			exits("FAIL");
+		}
+		if (pid == 0) {
+			// execl won't work yet. varargs hell.
+			char *args[] = {"ps", nil};
+			exec("/amd64/bin/ps", args);
+			fprint(2,"Exec fails: %r\n");
+			print("FAIL\n");
+			exits("FAIL");
+		}
+		w = wait();
+		if (w == nil) {
+			print("FAIL\n");
+			exits("FAIL");
+		}
+	}
+	// if we get here, we have survived. That's a miracle.
+	print("PASS\n");
+	exits("PASS");
+	return 0;
+}