summaryrefslogtreecommitdiffstats
path: root/tools/regression/pipe/pipe-overcommit2.c
diff options
context:
space:
mode:
authorsilby <silby@FreeBSD.org>2005-01-21 06:46:18 +0000
committersilby <silby@FreeBSD.org>2005-01-21 06:46:18 +0000
commit67f0a2039e1241df3aab89aaaf3e26e82f78958c (patch)
tree1768073020de5dadda1119b0355c69184220eeaa /tools/regression/pipe/pipe-overcommit2.c
parent8b5a41aeac62532507fcb39413b9f21bf9ba0166 (diff)
downloadFreeBSD-src-67f0a2039e1241df3aab89aaaf3e26e82f78958c.zip
FreeBSD-src-67f0a2039e1241df3aab89aaaf3e26e82f78958c.tar.gz
Add two more pipe regression tests. Not yet hooked into the test framework.
Diffstat (limited to 'tools/regression/pipe/pipe-overcommit2.c')
-rw-r--r--tools/regression/pipe/pipe-overcommit2.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/tools/regression/pipe/pipe-overcommit2.c b/tools/regression/pipe/pipe-overcommit2.c
new file mode 100644
index 0000000..5979585
--- /dev/null
+++ b/tools/regression/pipe/pipe-overcommit2.c
@@ -0,0 +1,69 @@
+/*-
+ * Copyright (C) 2005 Michael J. Silbersack <silby@freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice(s), this list of conditions and the following disclaimer as
+ * the first lines of this file unmodified other than the possible
+ * addition of one or more copyright notices.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice(s), this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+
+/*
+ * $FreeBSD$
+ * This program tests how sys_pipe.c handles the case where there
+ * is ample memory to allocate a pipe, but the file descriptor
+ * limit for that user has been exceeded.
+ */
+
+int main (int argc, void *argv[])
+
+{
+ int i, returnval, lastfd;
+ int pipes[10000];
+
+ for (i = 0; i < 100000; i++) {
+ returnval = open(argv[0], O_RDONLY);
+ if (returnval < 1)
+ break; /* All descriptors exhausted. */
+ else
+ lastfd = returnval;
+ }
+
+ /* First falloc failure case in sys_pipe.c:pipe() */
+ for (i = 0; i < 1000; i++) {
+ returnval = pipe(&pipes[i]);
+ }
+
+ /*
+ * Free just one FD so that the second falloc failure
+ * case will occur.
+ */
+ close(lastfd);
+
+ for (i = 0; i < 1000; i++) {
+ returnval = pipe(&pipes[i]);
+ }
+ printf("PASS\n");
+}
OpenPOWER on IntegriCloud