4 # Copyright (c) 2009 Peter Holm <pho@FreeBSD.org>
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
10 # 1. Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 # Regression test for panic in semexit_myhook
32 # Test scenario by kib@
39 sed '1,/^EOF/d' < $odir/$0 > sem.c
59 #include <sys/types.h>
60 #include <sys/param.h>
83 n = (arc4random() % 5000) + 200;
84 for (i = 0; i < n; i++)
91 int i, j, seed, status;
94 semkey = ftok("/", seed);
96 for (i = 0; i < 5000; i++) {
104 if (pid == 0) { /* child */
109 semid = semget(semkey, 0, 0);
110 } while (semid == -1 && j++ < 10000);
115 * Attempt to acquire the semaphore.
119 sop[0].sem_flg = SEM_UNDO;
121 semop(semid, sop, 1);
125 } else { /* parent */
127 if ((semid = semget(semkey, 1, IPC_CREAT | 010640)) == -1)
128 err(1, "semget (%s:%d)", __FILE__, __LINE__);
134 if (semop(semid, sop, 1) == -1)
135 warn("init: semop (%s:%d)", __FILE__, __LINE__);
138 if (semctl(semid, 0, IPC_RMID, 0) == -1 && errno != EINVAL)
139 warn("shmctl IPC_RMID (%s:%d)", __FILE__, __LINE__);
142 waitpid(pid, &status, 0);