5 #include <sys/select.h>
15 #include "freebsd_test_suite/macros.h"
17 #define MQNAME "/mytstqueue5"
22 sighandler(int sig __unused)
24 write(1, "timeout\n", 8);
39 PLAIN_REQUIRE_KERNEL_MODULE("mqueuefs", 0);
44 sigaddset(&set, SIGRTMIN);
45 sigprocmask(SIG_BLOCK, &set, NULL);
46 sigemptyset(&sa.sa_mask);
47 sa.sa_flags = SA_SIGINFO;
48 sa.sa_sigaction = (void *) SIG_DFL;
49 sigaction(SIGRTMIN, &sa, NULL);
52 attr.mq_msgsize = 128;
53 mq = mq_open(MQNAME, O_CREAT | O_RDWR | O_EXCL, 0666, &attr);
56 status = mq_getattr(mq, &attr);
58 err(1, "mq_getattr()");
60 if (pid == 0) { /* child */
63 struct sigevent sigev;
65 signal(SIGALRM, sighandler);
67 sigev.sigev_notify = SIGEV_SIGNAL;
68 sigev.sigev_signo = SIGRTMIN;
69 sigev.sigev_value.sival_int = 2;
72 mq = mq_open(MQNAME, O_RDWR | O_NONBLOCK);
74 err(1, "child: mq_open");
75 buf = malloc(attr.mq_msgsize);
76 for (j = 0; j < LOOPS; ++j) {
78 status = mq_notify(mq, &sigev);
80 err(1, "child: mq_notify");
81 status = sigwaitinfo(&set, &info);
83 err(1, "child: sigwaitinfo");
84 if (info.si_value.sival_int != 2)
85 err(1, "child: sival_int");
86 status = mq_receive(mq, buf, attr.mq_msgsize, &prio);
88 err(2, "child: mq_receive");
89 for (i = 0; i < attr.mq_msgsize; ++i)
91 err(3, "child: message data corrupted");
93 err(4, "child: priority is incorrect: %d",
100 } else if (pid == -1) {
106 signal(SIGALRM, sighandler);
107 buf = malloc(attr.mq_msgsize);
108 for (j = 0; j < LOOPS; ++j) {
109 for (i = 0; i < attr.mq_msgsize; ++i) {
113 status = mq_send(mq, buf, attr.mq_msgsize, PRIO);
123 status = mq_close(mq);