> On Wednesday, 14 October 2015, 12:43, Philippe Gerum <[email protected]> wrote:
>On 10/14/2015 12:22 PM, Frederik Bayart wrote:
>> Hallo,
>> I'm using xenomai 3.0 on kernel 3.18.20 (64 bit).
>>
>> When using single block heap, I'm getting memory allocation problem when 
>> calling rt_heap_alloc with size 0. I don't get the error when calling the 
>> function with size used in rt_heap_create.
>> On the mailing list, I found there has been an issue with this in May : 
>> http://www.xenomai.org/pipermail/xenomai/2015-May/034165.html
>> Is this still an issue ?
>
>No, this one is long gone.
>
>>
>> In attachment a test program htest.c + makefile to generate the problem :
>>
>> $ sudo ./htest 1  ==> use 0
>> htest.c:69: heapsize = 70000, usablemem = 70144, usedmem = 0
>> htest.c:79 ERROR: rt_heap_alloc(-12): Cannot allocate memory
>>
>> $ sudo ./htest 1  ==> use same size as in create
>> htest.c:69: heapsize = 70000, usablemem = 70144, usedmem = 0
>> htest.c:92: heapsize = 70000, usablemem = 70144, usedmem = 70144
>>
>
>Does this help?
>
>diff --git a/lib/alchemy/heap.c b/lib/alchemy/heap.c
>index 20531e3..146bfa1 100644
>--- a/lib/alchemy/heap.c
>+++ b/lib/alchemy/heap.c
>@@ -442,7 +442,9 @@ int rt_heap_alloc_timed(RT_HEAP *heap,
>        p = __mptr(hcb->sba);
>        if (p)
>            goto done;
>-        if (size > 0 && size != hcb->size) {
>+        if (size == 0)
>+            size = heapobj_size(&hcb->hobj);
>+        else if (size != hcb->size) {
>            ret = -EINVAL;
>            goto done;
>
>        }
>

After code reading, could it be that the exception for size == 0 has 
disappeared in the released code ?

  if (hcb->mode & H_SINGLE) {
    p = __mptr(hcb->sba);
    if (p)
      goto done;
    if (size > 0 && size != hcb->size) {
      ret = -EINVAL;
      goto done;
    }
    p = heapobj_alloc(&hcb->hobj, size);
    if (p == NULL) {
      ret = -ENOMEM;
      goto done;
    }
    hcb->sba = __moff(p);
    goto done;
  }


And if size is 0, alloc_block returns NULL so ENOMEM is returned.


>> However, I both cases, I get a trace in dmesg :
>>
>> [Xenomai] syscall <7> denied to sysregd
>
>That one is a different issue. Does your application have supervisor or
>user privileges?
>

I'm running the application as root. Is this the question ?

>-- 
>Philippe.

Frederik
_______________________________________________
Xenomai mailing list
[email protected]
http://xenomai.org/mailman/listinfo/xenomai

Reply via email to