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
