svn commit: r199475 - head/lib/librt
David Xu
davidxu at FreeBSD.org
Wed Nov 18 06:10:50 UTC 2009
Author: davidxu
Date: Wed Nov 18 06:10:50 2009
New Revision: 199475
URL: http://svn.freebsd.org/changeset/base/199475
Log:
Make following functions be cancellation points:
mq_receive
mq_send
mq_timereceive
mq_timedsend
Modified:
head/lib/librt/mq.c
Modified: head/lib/librt/mq.c
==============================================================================
--- head/lib/librt/mq.c Wed Nov 18 05:52:09 2009 (r199474)
+++ head/lib/librt/mq.c Wed Nov 18 06:10:50 2009 (r199475)
@@ -33,6 +33,7 @@
#include "namespace.h"
#include <errno.h>
+#include <pthread.h>
#include <stddef.h>
#include <stdlib.h>
#include <signal.h>
@@ -66,15 +67,15 @@ __weak_reference(__mq_getattr, mq_getatt
__weak_reference(__mq_getattr, _mq_getattr);
__weak_reference(__mq_setattr, mq_setattr);
__weak_reference(__mq_setattr, _mq_setattr);
-__weak_reference(__mq_timedreceive, mq_timedreceive);
+__weak_reference(__mq_timedreceive_cancel, mq_timedreceive);
__weak_reference(__mq_timedreceive, _mq_timedreceive);
-__weak_reference(__mq_timedsend, mq_timedsend);
+__weak_reference(__mq_timedsend_cancel, mq_timedsend);
__weak_reference(__mq_timedsend, _mq_timedsend);
__weak_reference(__mq_unlink, mq_unlink);
__weak_reference(__mq_unlink, _mq_unlink);
-__weak_reference(__mq_send, mq_send);
+__weak_reference(__mq_send_cancel, mq_send);
__weak_reference(__mq_send, _mq_send);
-__weak_reference(__mq_receive, mq_receive);
+__weak_reference(__mq_receive_cancel, mq_receive);
__weak_reference(__mq_receive, _mq_receive);
mqd_t
@@ -196,6 +197,19 @@ __mq_timedreceive(mqd_t mqd, char *buf,
}
ssize_t
+__mq_timedreceive_cancel(mqd_t mqd, char *buf, size_t len,
+ unsigned *prio, const struct timespec *timeout)
+{
+ int oldtype;
+ int ret;
+
+ _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
+ ret = __sys_kmq_timedreceive(mqd->oshandle, buf, len, prio, timeout);
+ _pthread_setcanceltype(oldtype, NULL);
+ return (ret);
+}
+
+ssize_t
__mq_receive(mqd_t mqd, char *buf, size_t len, unsigned *prio)
{
@@ -203,6 +217,17 @@ __mq_receive(mqd_t mqd, char *buf, size_
}
ssize_t
+__mq_receive_cancel(mqd_t mqd, char *buf, size_t len, unsigned *prio)
+{
+ int oldtype;
+ int ret;
+
+ _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
+ ret = __sys_kmq_timedreceive(mqd->oshandle, buf, len, prio, NULL);
+ _pthread_setcanceltype(oldtype, NULL);
+ return (ret);
+}
+ssize_t
__mq_timedsend(mqd_t mqd, char *buf, size_t len,
unsigned prio, const struct timespec *timeout)
{
@@ -211,12 +236,38 @@ __mq_timedsend(mqd_t mqd, char *buf, siz
}
ssize_t
+__mq_timedsend_cancel(mqd_t mqd, char *buf, size_t len,
+ unsigned prio, const struct timespec *timeout)
+{
+ int oldtype;
+ int ret;
+
+ _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
+ ret = __sys_kmq_timedsend(mqd->oshandle, buf, len, prio, timeout);
+ _pthread_setcanceltype(oldtype, NULL);
+ return (ret);
+}
+
+ssize_t
__mq_send(mqd_t mqd, char *buf, size_t len, unsigned prio)
{
return __sys_kmq_timedsend(mqd->oshandle, buf, len, prio, NULL);
}
+
+ssize_t
+__mq_send_cancel(mqd_t mqd, char *buf, size_t len, unsigned prio)
+{
+ int oldtype;
+ int ret;
+
+ _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
+ ret = __sys_kmq_timedsend(mqd->oshandle, buf, len, prio, NULL);
+ _pthread_setcanceltype(oldtype, NULL);
+ return (ret);
+}
+
int
__mq_unlink(const char *path)
{
More information about the svn-src-head
mailing list