svn commit: r315630 - user/pho/stress2/testcases/lockf
Peter Holm
pho at FreeBSD.org
Mon Mar 20 09:00:21 UTC 2017
Author: pho
Date: Mon Mar 20 09:00:20 2017
New Revision: 315630
URL: https://svnweb.freebsd.org/changeset/base/315630
Log:
Use quotes for local include file.
Sponsored by: Dell EMC Isilon
Modified:
user/pho/stress2/testcases/lockf/lockf.c
Modified: user/pho/stress2/testcases/lockf/lockf.c
==============================================================================
--- user/pho/stress2/testcases/lockf/lockf.c Mon Mar 20 08:59:12 2017 (r315629)
+++ user/pho/stress2/testcases/lockf/lockf.c Mon Mar 20 09:00:20 2017 (r315630)
@@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$");
#include <stdlib.h>
#include <unistd.h>
-#include <stress.h>
+#include "stress.h"
pid_t pid;
int fd;
@@ -54,11 +54,18 @@ get(void) {
do {
r = lockf(fd, F_LOCK, 0);
- } while (r == -1 && errno == EINTR);
+ } while (r == -1 && errno == EINTR && done_testing == 0);
if (r == -1)
err(1, "lockf(%s, F_LOCK)", file);
- if (read(fd, &sem, sizeof(sem)) != sizeof(sem))
+ if (lseek(fd, 0, SEEK_SET) == -1) // XXX
+ err(1, "lseek"); // XXX
+ r = read(fd, &sem, sizeof(sem));
+ if (r == -1)
err(1, "get: read(%d)", fd);
+ if (r == 0)
+ errx(1, "get() read 0 bytes");
+ if (r != sizeof(sem))
+ errx(1, "get() size error: %d", r);
if (lseek(fd, 0, SEEK_SET) == -1)
err(1, "lseek");
if (lockf(fd, F_ULOCK, 0) == -1)
@@ -72,7 +79,7 @@ incr(void) {
do {
r = lockf(fd, F_LOCK, 0);
- } while (r == -1 && errno == EINTR);
+ } while (r == -1 && errno == EINTR && done_testing == 0);
if (r == -1)
err(1, "lockf(%s, F_LOCK)", file);
if (read(fd, &sem, sizeof(sem)) != sizeof(sem))
@@ -132,8 +139,12 @@ test(void)
int sem = 0;
sprintf(file, "lockf.0.%d", getpid());
- if ((fd = open(file,O_CREAT | O_TRUNC | O_RDWR, 0600)) == -1)
- err(1, "creat(%s)", file);
+ if ((fd = open(file,O_CREAT | O_TRUNC | O_RDWR, 0600)) == -1) {
+ if (errno == ENOENT)
+ return (0);
+ else
+ err(1, "creat(%s) %s:%d", file, __FILE__, __LINE__);
+ }
if (write(fd, &sem, sizeof(sem)) != sizeof(sem))
err(1, "write");
if (lseek(fd, 0, SEEK_SET) == -1)
@@ -146,18 +157,19 @@ test(void)
}
if (pid == 0) { /* child */
- for (i = 0; i < 100; i++) {
- while ((get() & 1) == 0)
+ alarm(60);
+ for (i = 0; i < 100 && done_testing == 0; i++) {
+ while ((get() & 1) == 0 && done_testing == 0)
;
if (op->verbose > 3)
printf("Child %d, sem = %d\n", i, get()),
fflush(stdout);
incr();
}
- exit(0);
+ _exit(0);
} else { /* parent */
- for (i = 0; i < 100; i++) {
- while ((get() & 1) == 1)
+ for (i = 0; i < 100 && done_testing == 0; i++) {
+ while ((get() & 1) == 1 && done_testing == 0)
;
if (op->verbose > 3)
printf("Parent %d, sem = %d\n", i, get()),
@@ -166,6 +178,8 @@ test(void)
}
}
close(fd);
+ if (done_testing == 1)
+ kill(pid, SIGHUP);
waitpid(pid, &i, 0);
unlink(file);
More information about the svn-src-user
mailing list