4 #include <sys/select.h>
14 #include "freebsd_test_suite/macros.h"
16 #define MQNAME "/mytstqueue3"
21 sighandler(int sig __unused)
23 write(1, "timeout\n", 8);
36 PLAIN_REQUIRE_KERNEL_MODULE("mqueuefs", 0);
41 attr.mq_msgsize = 128;
42 mq = mq_open(MQNAME, O_CREAT | O_RDWR | O_EXCL, 0666, &attr);
45 status = mq_getattr(mq, &attr);
47 err(1, "mq_getattr()");
50 if (pid == 0) { /* child */
57 signal(SIGALRM, sighandler);
59 mq = mq_open(MQNAME, O_RDWR);
61 err(1, "child process: mq_open");
62 buf = malloc(attr.mq_msgsize);
63 for (j = 0; j < LOOPS; ++j) {
65 FD_SET(mq_getfd_np(mq), &set);
67 status = select(mq_getfd_np(mq) + 1, &set, NULL,
70 err(1, "child process: select()");
71 status = mq_receive(mq, buf, attr.mq_msgsize, &prio);
73 err(2, "child process: mq_receive");
74 for (i = 0; i < attr.mq_msgsize; ++i)
76 err(3, "message data corrupted");
78 err(4, "priority is incorrect: %d", prio);
84 } else if (pid == -1) {
90 signal(SIGALRM, sighandler);
91 buf = malloc(attr.mq_msgsize);
92 for (j = 0; j < LOOPS; ++j) {
93 for (i = 0; i < attr.mq_msgsize; ++i) {
98 FD_SET(mq_getfd_np(mq), &set);
99 status = select(mq_getfd_np(mq) + 1, NULL, &set,
103 status = mq_send(mq, buf, attr.mq_msgsize, PRIO);
113 status = mq_close(mq);