Module: xenomai-forge
Branch: master
Commit: 782367d90d5eeba0c776738ae0c034906cb9bc98
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=782367d90d5eeba0c776738ae0c034906cb9bc98

Author: Philippe Gerum <r...@xenomai.org>
Date:   Mon Nov  7 10:46:38 2011 +0100

alchemy/queue: various fixes

---

 include/alchemy/queue.h |    2 +-
 lib/alchemy/queue.c     |   13 ++++++++-----
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/include/alchemy/queue.h b/include/alchemy/queue.h
index 0f9645d..b9d68f5 100644
--- a/include/alchemy/queue.h
+++ b/include/alchemy/queue.h
@@ -76,7 +76,7 @@ int rt_queue_free(RT_QUEUE *queue,
                  void *buf);
 
 int rt_queue_send(RT_QUEUE *queue,
-                 void *buf,
+                 const void *buf,
                  size_t size,
                  int mode);
 
diff --git a/lib/alchemy/queue.c b/lib/alchemy/queue.c
index 3178102..64e19ae 100644
--- a/lib/alchemy/queue.c
+++ b/lib/alchemy/queue.c
@@ -93,7 +93,7 @@ int rt_queue_create(RT_QUEUE *queue, const char *name,
        if (threadobj_irq_p())
                return -EPERM;
 
-       if (poolsize == 0)
+       if (poolsize == 0 || (mode & ~Q_PRIO) != 0)
                return -EINVAL;
 
        COPPERPLATE_PROTECT(svc);
@@ -239,7 +239,7 @@ out:
 }
 
 int rt_queue_send(RT_QUEUE *queue,
-                 void *buf, size_t size, int mode)
+                 const void *buf, size_t size, int mode)
 {
        struct alchemy_queue_wait *wait;
        struct alchemy_queue_msg *msg;
@@ -343,8 +343,8 @@ ssize_t rt_queue_receive_until(RT_QUEUE *queue,
                goto out;
        }
 
-       msg = list_pop_entry(&qcb->mq, struct alchemy_queue_msg, next);
-       if (msg) {
+       if (!list_empty(&qcb->mq)) {
+               msg = list_pop_entry(&qcb->mq, struct alchemy_queue_msg, next);
                msg->refcount++;
                *bufp = msg + 1;
                ret = (ssize_t)msg->size;
@@ -403,6 +403,7 @@ ssize_t rt_queue_read_until(RT_QUEUE *queue,
 {
        ssize_t rsize;
        void *_buf;
+       int ret;
 
        rsize = rt_queue_receive_until(queue, &_buf, timeout);
        if (rsize < 0)
@@ -414,7 +415,9 @@ ssize_t rt_queue_read_until(RT_QUEUE *queue,
        if (size > 0)
                memcpy(buf, _buf, size);
 
-       rt_queue_free(queue, _buf);
+       ret = rt_queue_free(queue, _buf);
+       if (ret)
+               return __bt(ret);
 
        return rsize;
 }


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to