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

Author: Gilles Chanteperdrix <[email protected]>
Date:   Wed Oct 12 22:07:59 2011 +0200

native: free buffer outside critical section in rt_buffer_delete

---

 ksrc/skins/native/buffer.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/ksrc/skins/native/buffer.c b/ksrc/skins/native/buffer.c
index 0b0f0c0..4ae546c 100644
--- a/ksrc/skins/native/buffer.c
+++ b/ksrc/skins/native/buffer.c
@@ -314,6 +314,8 @@ int rt_buffer_create(RT_BUFFER *bf, const char *name, 
size_t bufsz, int mode)
 int rt_buffer_delete(RT_BUFFER *bf)
 {
        int ret = 0, resched;
+       void *bufmem = NULL;
+       size_t bufsz = 0;
        spl_t s;
 
        if (xnpod_asynch_p())
@@ -327,7 +329,8 @@ int rt_buffer_delete(RT_BUFFER *bf)
                goto unlock_and_exit;
        }
 
-       xnarch_free_host_mem(bf->bufmem, bf->bufsz);
+       bufmem = bf->bufmem;
+       bufsz = bf->bufsz;
        removeq(bf->rqueue, &bf->rlink);
        resched = xnsynch_destroy(&bf->isynch_base) == XNSYNCH_RESCHED;
        resched += xnsynch_destroy(&bf->osynch_base) == XNSYNCH_RESCHED;
@@ -348,6 +351,9 @@ int rt_buffer_delete(RT_BUFFER *bf)
 
        xnlock_put_irqrestore(&nklock, s);
 
+       if (bufmem)
+               xnarch_free_host_mem(bufmem, bufsz);
+
        return ret;
 }
 


_______________________________________________
Xenomai-git mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-git

Reply via email to