svn commit: r317674 - user/pho/stress2/misc

Peter Holm pho at FreeBSD.org
Tue May 2 06:54:50 UTC 2017


Author: pho
Date: Tue May  2 06:54:48 2017
New Revision: 317674
URL: https://svnweb.freebsd.org/changeset/base/317674

Log:
  Fix issue with missing waits. Cleanup test case while here.
  
  Sponsored by:	Dell EMC Isilon

Modified:
  user/pho/stress2/misc/mmap21.sh

Modified: user/pho/stress2/misc/mmap21.sh
==============================================================================
--- user/pho/stress2/misc/mmap21.sh	Tue May  2 06:27:46 2017	(r317673)
+++ user/pho/stress2/misc/mmap21.sh	Tue May  2 06:54:48 2017	(r317674)
@@ -42,9 +42,7 @@ sed '1,/^EOF/d' < $here/$0 > mmap21.c
 mycc -o mmap21 -Wall -Wextra -O2 -g mmap21.c -lpthread || exit 1
 rm -f mmap21.c
 
-for i in `jot 2`; do
-	su $testuser -c /tmp/mmap21
-done
+su $testuser -c /tmp/mmap21
 
 rm -f /tmp/mmap21 /tmp/mmap21.core
 exit 0
@@ -64,12 +62,13 @@ EOF
 #include <stdlib.h>
 #include <unistd.h>
 
-#define LOOPS 2
-#define PARALLEL 50
+#define LOOPS 1
+#define NMAPS 50
+#define PARALLEL 2
 
 void *p;
 
-void *
+static void *
 tmmap(void *arg __unused)
 {
 	size_t len;
@@ -78,13 +77,13 @@ tmmap(void *arg __unused)
 	pthread_set_name_np(pthread_self(), __func__);
 	len = 1LL * 128 * 1024 * 1024;
 
-	for (i = 0; i < 100; i++)
+	for (i = 0; i < NMAPS; i++)
 		p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0);
 
 	return (NULL);
 }
 
-void *
+static void *
 tmlock(void *arg __unused)
 {
 	size_t len;
@@ -108,9 +107,10 @@ tmlock(void *arg __unused)
 	return (NULL);
 }
 
-void
+static void
 test(void)
 {
+	pid_t pid;
 	pthread_t tid[2];
 	int i, rc;
 
@@ -120,11 +120,12 @@ test(void)
 		errc(1, rc, "tmlock()");
 
 	for (i = 0; i < 100; i++) {
-		if (fork() == 0) {
+		if ((pid = fork()) == 0) {
 			usleep(10000);
 			_exit(0);
 		}
-		wait(NULL);
+		if (waitpid(pid, NULL, 0) != pid)
+			err(1, "waitpid(%d)", pid);
 	}
 
 	raise(SIGSEGV);
@@ -138,18 +139,23 @@ test(void)
 int
 main(void)
 {
-	int i, j;
 
-	alarm(120);
+	pid_t pids[PARALLEL];
+	int e, i, j, status;
+
 	for (i = 0; i < LOOPS; i++) {
 		for (j = 0; j < PARALLEL; j++) {
-			if (fork() == 0)
+			if ((pids[j] = fork()) == 0)
 				test();
 		}
 
-		for (j = 0; j < PARALLEL; j++)
-			wait(NULL);
+		e = 0;
+		for (j = 0; j < PARALLEL; j++) {
+			if (waitpid(pids[j], &status, 0) == -1)
+				err(1, "waitpid(%d)", pids[j]);
+			e += status == 0 ? 0 : 1;
+		}
 	}
 
-	return (0);
+	return (e);
 }


More information about the svn-src-user mailing list