1152832Sdavidxu/* $FreeBSD$ */ 2152832Sdavidxu 3205225Skib#include <err.h> 4205225Skib#include <errno.h> 5205225Skib#include <fcntl.h> 6152832Sdavidxu#include <mqueue.h> 7152832Sdavidxu#include <signal.h> 8205225Skib#include <stdio.h> 9152832Sdavidxu 10282858Sngie#include "freebsd_test_suite/macros.h" 11282858Sngie 12152832Sdavidxu#define MQNAME "/mytstqueue1" 13152832Sdavidxu 14281428Sngieint 15281428Sngiemain(void) 16152832Sdavidxu{ 17152832Sdavidxu struct mq_attr attr, attr2; 18152832Sdavidxu struct sigevent sigev; 19165829Sdavidxu mqd_t mq; 20152832Sdavidxu int status; 21152832Sdavidxu 22282858Sngie PLAIN_REQUIRE_KERNEL_MODULE("mqueuefs", 0); 23282858Sngie 24152832Sdavidxu attr.mq_maxmsg = 2; 25152832Sdavidxu attr.mq_msgsize = 100; 26152832Sdavidxu mq = mq_open(MQNAME, O_CREAT | O_RDWR | O_EXCL, 0666, &attr); 27165829Sdavidxu if (mq == (mqd_t)-1) 28152832Sdavidxu err(1, "mq_open"); 29152832Sdavidxu status = mq_unlink(MQNAME); 30152832Sdavidxu if (status) 31152832Sdavidxu err(1, "mq_unlink"); 32152832Sdavidxu status = mq_getattr(mq, &attr2); 33152832Sdavidxu if (status) 34152832Sdavidxu err(1, "mq_getattr"); 35152832Sdavidxu if (attr.mq_maxmsg != attr2.mq_maxmsg) 36152832Sdavidxu err(1, "mq_maxmsg changed"); 37152832Sdavidxu if (attr.mq_msgsize != attr2.mq_msgsize) 38152832Sdavidxu err(1, "mq_msgsize changed"); 39152832Sdavidxu 40152832Sdavidxu sigev.sigev_notify = SIGEV_SIGNAL; 41152832Sdavidxu sigev.sigev_signo = SIGRTMIN; 42152832Sdavidxu status = mq_notify(mq, &sigev); 43152832Sdavidxu if (status) 44152832Sdavidxu err(1, "mq_notify"); 45152832Sdavidxu status = mq_notify(mq, &sigev); 46152832Sdavidxu if (status == 0) 47152832Sdavidxu err(1, "mq_notify 2"); 48152832Sdavidxu else if (errno != EBUSY) 49152832Sdavidxu err(1, "mq_notify 3"); 50152832Sdavidxu status = mq_notify(mq, NULL); 51152832Sdavidxu if (status) 52152832Sdavidxu err(1, "mq_notify 4"); 53152832Sdavidxu status = mq_close(mq); 54152832Sdavidxu if (status) 55152832Sdavidxu err(1, "mq_close"); 56152832Sdavidxu return (0); 57152832Sdavidxu} 58