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

Author: Philippe Gerum <r...@xenomai.org>
Date:   Mon Sep  7 18:28:43 2009 +0200

rtipc/xddp: fix context locking in sendmsg()

---

 ksrc/drivers/ipc/xddp.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/ksrc/drivers/ipc/xddp.c b/ksrc/drivers/ipc/xddp.c
index aec7f76..8e5f8e0 100644
--- a/ksrc/drivers/ipc/xddp.c
+++ b/ksrc/drivers/ipc/xddp.c
@@ -57,6 +57,7 @@ struct xddp_socket {
        size_t reqbufsz;        /* Requested streaming buffer size */
 
        int (*monitor)(int s, int event, long arg);
+       struct rtipc_private *priv;
 };
 
 static struct sockaddr_ipc nullsa = {
@@ -259,6 +260,7 @@ static int xddp_socket(struct rtipc_private *priv,
        sk->reqbufsz = 0;
        sk->monitor = NULL;
        rtdm_lock_init(&sk->lock);
+       sk->priv = priv;
 
        return 0;
 }
@@ -501,7 +503,7 @@ static ssize_t __xddp_sendmsg(struct rtipc_private *priv,
                        if (!test_bit(_XDDP_BOUND, &rsk->status))
                                ret = -ECONNREFUSED;
                        else {
-                               rcontext = rtdm_private_to_context(priv);
+                               rcontext = rtdm_private_to_context(rsk->priv);
                                rtdm_context_lock(rcontext);
                                ret = 0;
                        }
@@ -701,7 +703,6 @@ static int __xddp_bind_socket(struct rtipc_private *priv,
                return ret;
 
        poolsz = sk->poolsz;
-
        if (poolsz > 0) {
                poolsz = xnheap_rounded_size(poolsz + sk->reqbufsz, 
XNHEAP_PAGE_SIZE);
                poolmem = xnarch_alloc_host_mem(poolsz);
@@ -1088,8 +1089,8 @@ static int xddp_ioctl(struct rtipc_private *priv,
                      rtdm_user_info_t *user_info,
                      unsigned int request, void *arg)
 {
-       struct sockaddr_ipc saddr, *saddrp;
        struct xddp_socket *sk = priv->state;
+       struct sockaddr_ipc saddr, *saddrp;
        int ret;
 
        if (rtdm_in_rt_context() || request != _RTIOC_BIND)


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

Reply via email to