> 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 patch should address the issue:
> 
> commit e539ab0b1db5ca56f8d3db39d2ca0bdf009c9b25
> Author: Philippe Gerum <[email protected]>
> Date:   Tue Sep 13 09:36:11 2016 +0200
> 
>     boilerplate/ancillaries: fix unique name generation in pshared mode
> 
> diff --git a/lib/boilerplate/ancillaries.c b/lib/boilerplate/ancillaries.c
> index a811a40..0f469a4 100644
> --- a/lib/boilerplate/ancillaries.c
> +++ b/lib/boilerplate/ancillaries.c
> @@ -231,7 +231,11 @@ char *generate_name(char *buf, const char *radix,
>               buf[len] = '\0';
>       } else {
>               tag = atomic_add_fetch(&ngen->serial, 1);
> +#ifdef CONFIG_XENO_PSHARED
> +             snprintf(buf, len, "%s@%d[%d]", ngen->radix, tag,
> __node_id);
> +#else
>               snprintf(buf, len, "%s@%d", ngen->radix, tag);
> +#endif
>       }
> 
>       return buf;
> 

Thank you for the patch, we will test it soon and give feedback on the result.

Tobias


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

Reply via email to