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

Author: Philippe Gerum <r...@xenomai.org>
Date:   Wed Nov 16 17:56:47 2011 +0100

copperplate/heapobj: fix locking in pshared_extend()

---

 lib/copperplate/heapobj-pshared.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/lib/copperplate/heapobj-pshared.c 
b/lib/copperplate/heapobj-pshared.c
index 8feae81..06ff7d5 100644
--- a/lib/copperplate/heapobj-pshared.c
+++ b/lib/copperplate/heapobj-pshared.c
@@ -682,19 +682,21 @@ static int pshared_extend(struct heapobj *hobj, size_t 
size, void *mem)
        if (size <= HOBJ_PAGE_SIZE * 2)
                return __bt(-EINVAL);
 
+       write_lock_safe(&heap->lock, state);
        newsize = size + hobj->size + sizeof(*heap) + sizeof(*extent);
        ret = __STD(ftruncate(hobj->fd, newsize));
-       if (ret)
-               return __bt(-errno);
+       if (ret) {
+               ret = __bt(-errno);
+               goto out;
+       }
        /*
         * We do not allow the kernel to move the mapping address, so
         * it is safe referring to the heap contents while extending
         * it.
         */
-       write_lock_safe(&heap->lock, state);
        p = mremap(heap, hobj->size + sizeof(*heap), newsize, 0);
        if (p == MAP_FAILED) {
-               ret = -errno;
+               ret = __bt(-errno);
                goto out;
        }
 


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

Reply via email to