Export the mq_getfd_np() symbol from librt.so, which allows to get
file descriptor for the given posix mqueue. Export the timer_oshandle_np() symbol to get ktimer id for the given posix timer. Requested by: Lewis Donzis <lew@perftech.com> Reviewed by: jilles Discussed with: kan Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
a7d1d41617
commit
ddce1c3ddb
@ -50,7 +50,9 @@ ssize_t mq_timedreceive(mqd_t, char *__restrict, size_t,
|
|||||||
int mq_timedsend(mqd_t, const char *, size_t, unsigned,
|
int mq_timedsend(mqd_t, const char *, size_t, unsigned,
|
||||||
const struct timespec *);
|
const struct timespec *);
|
||||||
int mq_unlink(const char *);
|
int mq_unlink(const char *);
|
||||||
int __mq_oshandle(mqd_t mqd);
|
#if __BSD_VISIBLE
|
||||||
|
int mq_getfd_np(mqd_t mqd);
|
||||||
|
#endif /* __BSD_VISIBLE */
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
#endif
|
#endif
|
||||||
|
@ -194,6 +194,7 @@ char *timezone(int, int); /* XXX XSI conflict */
|
|||||||
void tzsetwall(void);
|
void tzsetwall(void);
|
||||||
time_t timelocal(struct tm * const);
|
time_t timelocal(struct tm * const);
|
||||||
time_t timegm(struct tm * const);
|
time_t timegm(struct tm * const);
|
||||||
|
int timer_oshandle_np(timer_t timerid);
|
||||||
#endif /* __BSD_VISIBLE */
|
#endif /* __BSD_VISIBLE */
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
|
#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
|
||||||
|
@ -25,6 +25,11 @@ FBSD_1.0 {
|
|||||||
timer_getoverrun;
|
timer_getoverrun;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
FBSD_1.5 {
|
||||||
|
mq_getfd_np;
|
||||||
|
timer_oshandle_np;
|
||||||
|
};
|
||||||
|
|
||||||
FBSDprivate_1.0 {
|
FBSDprivate_1.0 {
|
||||||
_aio_read;
|
_aio_read;
|
||||||
_aio_write;
|
_aio_write;
|
||||||
|
@ -272,8 +272,9 @@ __mq_unlink(const char *path)
|
|||||||
return __sys_kmq_unlink(path);
|
return __sys_kmq_unlink(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma weak mq_getfd_np
|
||||||
int
|
int
|
||||||
__mq_oshandle(mqd_t mqd)
|
mq_getfd_np(mqd_t mqd)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (mqd->oshandle);
|
return (mqd->oshandle);
|
||||||
|
@ -175,8 +175,9 @@ __timer_settime(timer_t timerid, int flags,
|
|||||||
flags, value, ovalue);
|
flags, value, ovalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma weak timer_oshandle_np
|
||||||
int
|
int
|
||||||
__timer_oshandle(timer_t timerid)
|
timer_oshandle_np(timer_t timerid)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (timerid->oshandle);
|
return (timerid->oshandle);
|
||||||
|
@ -10,8 +10,8 @@ CFLAGS+= -I${SRCTOP}/tests
|
|||||||
|
|
||||||
PROGS+= mqtest1
|
PROGS+= mqtest1
|
||||||
PROGS+= mqtest2
|
PROGS+= mqtest2
|
||||||
#PROGS+= mqtest3
|
PROGS+= mqtest3
|
||||||
#PROGS+= mqtest4
|
PROGS+= mqtest4
|
||||||
PROGS+= mqtest5
|
PROGS+= mqtest5
|
||||||
|
|
||||||
LIBADD+= rt
|
LIBADD+= rt
|
||||||
|
@ -62,9 +62,10 @@ main(void)
|
|||||||
buf = malloc(attr.mq_msgsize);
|
buf = malloc(attr.mq_msgsize);
|
||||||
for (j = 0; j < LOOPS; ++j) {
|
for (j = 0; j < LOOPS; ++j) {
|
||||||
FD_ZERO(&set);
|
FD_ZERO(&set);
|
||||||
FD_SET(__mq_oshandle(mq), &set);
|
FD_SET(mq_getfd_np(mq), &set);
|
||||||
alarm(3);
|
alarm(3);
|
||||||
status = select(__mq_oshandle(mq)+1, &set, NULL, NULL, NULL);
|
status = select(mq_getfd_np(mq) + 1, &set, NULL,
|
||||||
|
NULL, NULL);
|
||||||
if (status != 1)
|
if (status != 1)
|
||||||
err(1, "child process: select()");
|
err(1, "child process: select()");
|
||||||
status = mq_receive(mq, buf, attr.mq_msgsize, &prio);
|
status = mq_receive(mq, buf, attr.mq_msgsize, &prio);
|
||||||
@ -94,8 +95,9 @@ main(void)
|
|||||||
}
|
}
|
||||||
alarm(3);
|
alarm(3);
|
||||||
FD_ZERO(&set);
|
FD_ZERO(&set);
|
||||||
FD_SET(__mq_oshandle(mq), &set);
|
FD_SET(mq_getfd_np(mq), &set);
|
||||||
status = select(__mq_oshandle(mq)+1, NULL, &set, NULL, NULL);
|
status = select(mq_getfd_np(mq) + 1, NULL, &set,
|
||||||
|
NULL, NULL);
|
||||||
if (status != 1)
|
if (status != 1)
|
||||||
err(1, "select()");
|
err(1, "select()");
|
||||||
status = mq_send(mq, buf, attr.mq_msgsize, PRIO);
|
status = mq_send(mq, buf, attr.mq_msgsize, PRIO);
|
||||||
|
@ -57,7 +57,7 @@ main(void)
|
|||||||
mq = mq_open(MQNAME, O_RDWR);
|
mq = mq_open(MQNAME, O_RDWR);
|
||||||
if (mq == (mqd_t)-1)
|
if (mq == (mqd_t)-1)
|
||||||
err(1, "child: mq_open");
|
err(1, "child: mq_open");
|
||||||
EV_SET(&kev, __mq_oshandle(mq), EVFILT_READ, EV_ADD, 0, 0, 0);
|
EV_SET(&kev, mq_getfd_np(mq), EVFILT_READ, EV_ADD, 0, 0, 0);
|
||||||
status = kevent(kq, &kev, 1, NULL, 0, NULL);
|
status = kevent(kq, &kev, 1, NULL, 0, NULL);
|
||||||
if (status == -1)
|
if (status == -1)
|
||||||
err(1, "child: kevent");
|
err(1, "child: kevent");
|
||||||
@ -89,7 +89,7 @@ main(void)
|
|||||||
|
|
||||||
signal(SIGALRM, sighandler);
|
signal(SIGALRM, sighandler);
|
||||||
kq = kqueue();
|
kq = kqueue();
|
||||||
EV_SET(&kev, __mq_oshandle(mq), EVFILT_WRITE, EV_ADD, 0, 0, 0);
|
EV_SET(&kev, mq_getfd_np(mq), EVFILT_WRITE, EV_ADD, 0, 0, 0);
|
||||||
status = kevent(kq, &kev, 1, NULL, 0, NULL);
|
status = kevent(kq, &kev, 1, NULL, 0, NULL);
|
||||||
if (status == -1)
|
if (status == -1)
|
||||||
err(1, "kevent");
|
err(1, "kevent");
|
||||||
|
Loading…
Reference in New Issue
Block a user