On 09/06/2016 05:38 PM, Tobias Luksch wrote:
> Hello,
> 
> [Arch:x86, Processor:Corei7, Kernel: 4.1.18, Xenomai:3.0.2]
> 
> we are using several Xenomai processes communicating using shared memory 
> (rt_heap) and a few named mutexes. The processes also create additional 
> unnamed task, mutexes, semaphores, etc.
> After porting to Xenomai 3, I see the following problem: To access the shared 
> heap, I start two processes within the same session (--session from command 
> line). Shared access to the heap works, but when creating unnamed objects, 
> e.g. a mutex, in the second process, rt_mutex_create returns -17.
> 
> Here is a small example program to reproduce this:
> 
> #include <alchemy/task.h>
> #include <alchemy/mutex.h>
> #include <stdio.h>
> 
> int main(int argc, char* argv[])
> {
>       rt_printf("hello  world\n");
>       RT_MUTEX mutex;
>       int ret_val = rt_mutex_create( &mutex, NULL );
>       rt_printf( "rt_mutex_create: %d\n", ret_val );
> 
>       while (true)
>       {
>               rt_task_sleep(1000000000);
>               rt_printf("ping\n");
>       }
>       return 0;
> }
> 
> Starting this program (called xeno-test here) once gives:
> $ ./xeno-test --session=test
> hello  world
> rt_mutex_create: 0
> ping
> ping
> [..]
> 
> Starting it a second time with the same session:
> $ ./xeno-test --session=test
> hello  world
> rt_mutex_create: -17
> ping
> ping
> [..]
> 
> Starting the program another time with a different session works without 
> error. Also using differently named mutexes for both instances works.
> 
> I am not sure about the naming mechanism (if any) when creating unnamed 
> objects like mutexes, nor about what is actually shared between processes 
> when using the same session. It would be great if anyone could give some 
> details on this.
> 
> Any help would be appreciated.

This is a shortcoming of the internal no-so-random name generator used
for anon objects in lib/alchemy: it should use a shared counter when
running in pshared mode for drawing unique names, but currently uses a
process-private one which is wrong. Hence the -EEXIST error received
when two processes draw the same private counter value, which is likely.

As a work around, you could provide named mutexes based on a sequence
number and the current pid value, until the name generator is fixed in
mainline.

-- 
Philippe.

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

Reply via email to