Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Oct 2016 12:25:15 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Alexander Kabaev <kabaev@gmail.com>
Cc:        Lewis Donzis <lew@perftech.com>, deischen@freebsd.org, freebsd-arch@freebsd.org
Subject:   Re: mq on kqueue broken after upgrade to FreeBSD 11
Message-ID:  <20161001092515.GW38409@kib.kiev.ua>
In-Reply-To: <20160930184418.1047afc2@kan>
References:  <8A6CD0D3-C4D5-40DF-B2AD-4C454CC88AD1@perftech.com> <20160930094544.GP38409@kib.kiev.ua> <19A6EEAA-C68E-4DAD-B98F-4D904734BD8B@perftech.com> <20160930152006.GS38409@kib.kiev.ua> <20160930184418.1047afc2@kan>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Sep 30, 2016 at 06:44:18PM -0400, Alexander Kabaev wrote:
> No objection, but possible suggestion: if the primary use of this
> symbol is for tests and nothing else, maybe it does belong in
> FBSDprivate_1.0 FBSDprivate_1.0 section instead?

Good question. The symbols are useful for real-world code, not only for
the tests. But I think that we should mark symbol as non-portable. Usual
approach of adding _np suffix seems to be the right thing to do there.

What about the following ?

diff --git a/include/mqueue.h b/include/mqueue.h
index 788d0a1..297e8d0 100644
--- a/include/mqueue.h
+++ b/include/mqueue.h
@@ -50,7 +50,9 @@ ssize_t	mq_timedreceive(mqd_t, char *__restrict, size_t,
 int	mq_timedsend(mqd_t, const char *, size_t, unsigned,
 		const struct timespec *);
 int	mq_unlink(const char *);
-int	__mq_oshandle(mqd_t mqd);
+#if __BSD_VISIBLE
+int	mq_oshandle_np(mqd_t mqd);
+#endif /* __BSD_VISIBLE */
 
 __END_DECLS
 #endif
diff --git a/include/time.h b/include/time.h
index 14d6044..c172538 100644
--- a/include/time.h
+++ b/include/time.h
@@ -194,6 +194,7 @@ char *timezone(int, int);	/* XXX XSI conflict */
 void tzsetwall(void);
 time_t timelocal(struct tm * const);
 time_t timegm(struct tm * const);
+int timer_oshandle_np(timer_t timerid);
 #endif /* __BSD_VISIBLE */
 
 #if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
diff --git a/lib/librt/Symbol.map b/lib/librt/Symbol.map
index 161bb76..8fbca9c 100644
--- a/lib/librt/Symbol.map
+++ b/lib/librt/Symbol.map
@@ -25,6 +25,11 @@ FBSD_1.0 {
 	timer_getoverrun;
 };
 
+FBSD_1.5 {
+	mq_oshandle_np;
+	timer_oshandle_np;
+};
+
 FBSDprivate_1.0 {
 	_aio_read;
 	_aio_write;
@@ -56,6 +61,7 @@ FBSDprivate_1.0 {
 	__mq_unlink;
 	__mq_send;
 	__mq_receive;
+	__mq_oshandle_np;
 	_timer_create;
 	_timer_delete;
 	_timer_gettime;
@@ -66,4 +72,5 @@ FBSDprivate_1.0 {
 	__timer_gettime;
 	__timer_settime;
 	__timer_getoverrun;
+	__timer_oshandle_np;
 };
diff --git a/lib/librt/mq.c b/lib/librt/mq.c
index 750e969..60704a4 100644
--- a/lib/librt/mq.c
+++ b/lib/librt/mq.c
@@ -78,6 +78,7 @@ __weak_reference(__mq_send_cancel, mq_send);
 __weak_reference(__mq_send, _mq_send);
 __weak_reference(__mq_receive_cancel, mq_receive);
 __weak_reference(__mq_receive, _mq_receive);
+__weak_reference(__mq_oshandle_np, mq_oshandle_np);
 
 mqd_t
 __mq_open(const char *name, int oflag, mode_t mode,
@@ -273,7 +274,7 @@ __mq_unlink(const char *path)
 }
 
 int
-__mq_oshandle(mqd_t mqd)
+__mq_oshandle_np(mqd_t mqd)
 {
 
 	return (mqd->oshandle);
diff --git a/lib/librt/timer.c b/lib/librt/timer.c
index 90269c2..fc1379a 100644
--- a/lib/librt/timer.c
+++ b/lib/librt/timer.c
@@ -63,6 +63,7 @@ __weak_reference(__timer_settime, timer_settime);
 __weak_reference(__timer_settime, _timer_settime);
 __weak_reference(__timer_getoverrun, timer_getoverrun);
 __weak_reference(__timer_getoverrun, _timer_getoverrun);
+__weak_reference(__timer_oshandle_np, timer_oshandle_np);
 
 typedef void (*timer_func)(union sigval val, int overrun);
 
@@ -176,7 +177,7 @@ __timer_settime(timer_t timerid, int flags,
 }
 
 int
-__timer_oshandle(timer_t timerid)
+__timer_oshandle_np(timer_t timerid)
 {
 
 	return (timerid->oshandle);
diff --git a/tests/sys/mqueue/Makefile b/tests/sys/mqueue/Makefile
index ce5033c..251c497 100644
--- a/tests/sys/mqueue/Makefile
+++ b/tests/sys/mqueue/Makefile
@@ -10,8 +10,8 @@ CFLAGS+=	-I${SRCTOP}/tests
 
 PROGS+=		mqtest1
 PROGS+=		mqtest2
-#PROGS+=		mqtest3
-#PROGS+=		mqtest4
+PROGS+=		mqtest3
+PROGS+=		mqtest4
 PROGS+=		mqtest5
 
 LIBADD+=	rt
diff --git a/tests/sys/mqueue/mqtest3.c b/tests/sys/mqueue/mqtest3.c
index c4b849e..7325572 100644
--- a/tests/sys/mqueue/mqtest3.c
+++ b/tests/sys/mqueue/mqtest3.c
@@ -62,9 +62,10 @@ main(void)
 		buf = malloc(attr.mq_msgsize);
 		for (j = 0; j < LOOPS; ++j) {
 			FD_ZERO(&set);
-			FD_SET(__mq_oshandle(mq), &set);
+			FD_SET(mq_oshandle_np(mq), &set);
 			alarm(3);
-			status = select(__mq_oshandle(mq)+1, &set, NULL, NULL, NULL);
+			status = select(mq_oshandle_np(mq) + 1, &set, NULL,
+			    NULL, NULL);
 			if (status != 1)
 				err(1, "child process: select()");
 			status = mq_receive(mq, buf, attr.mq_msgsize, &prio);
@@ -94,8 +95,9 @@ main(void)
 			}
 			alarm(3);
 			FD_ZERO(&set);
-			FD_SET(__mq_oshandle(mq), &set);
-			status = select(__mq_oshandle(mq)+1, NULL, &set, NULL, NULL);
+			FD_SET(mq_oshandle_np(mq), &set);
+			status = select(mq_oshandle_np(mq) + 1, NULL, &set,
+			    NULL, NULL);
 			if (status != 1)
 				err(1, "select()");
 			status = mq_send(mq, buf, attr.mq_msgsize, PRIO);
diff --git a/tests/sys/mqueue/mqtest4.c b/tests/sys/mqueue/mqtest4.c
index 474d212..fff04c0c 100644
--- a/tests/sys/mqueue/mqtest4.c
+++ b/tests/sys/mqueue/mqtest4.c
@@ -57,7 +57,7 @@ main(void)
 		mq = mq_open(MQNAME, O_RDWR);
 		if (mq == (mqd_t)-1)
 			err(1, "child: mq_open");
-		EV_SET(&kev, __mq_oshandle(mq), EVFILT_READ, EV_ADD, 0, 0, 0);
+		EV_SET(&kev, mq_oshandle_np(mq), EVFILT_READ, EV_ADD, 0, 0, 0);
 		status = kevent(kq, &kev, 1, NULL, 0, NULL);
 		if (status == -1)
 			err(1, "child: kevent");
@@ -89,7 +89,7 @@ main(void)
 
 		signal(SIGALRM, sighandler);
 		kq = kqueue();
-		EV_SET(&kev, __mq_oshandle(mq), EVFILT_WRITE, EV_ADD, 0, 0, 0);
+		EV_SET(&kev, mq_oshandle_np(mq), EVFILT_WRITE, EV_ADD, 0, 0, 0);
 		status = kevent(kq, &kev, 1, NULL, 0, NULL);
 		if (status == -1)
 			err(1, "kevent");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20161001092515.GW38409>