Am Fri, 9 Feb 2018 17:48:22 +0100
schrieb Jan Kiszka <jan.kis...@siemens.com>:

> On 2018-02-09 17:13, Henning Schild wrote:
> > When using dlopen() to include xenomai libraries into an
> > application, __xenomai_init could be running in multiple threads at
> > a time. That happens if the application dlopens multiple libs in
> > multiple threads.  
> 
> So, dlopen itself is thread-safe, but it does not guarantee atomicity
> for the init functions it executes? Or would we run xenomai_init_dso
> manually in that case?

According to its man-page dlopen is MT-Safe, but i do not think that
necessarily means it will serialize the init functions for us. I think
i will have to read the code to answer this one.

Henning

> > 
> > Introduce a big lock to serialize all calls to __xenomai_init.
> > 
> > Signed-off-by: Henning Schild <henning.sch...@siemens.com>
> > ---
> >  lib/boilerplate/setup.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/lib/boilerplate/setup.c b/lib/boilerplate/setup.c
> > index f749828b91..653bbae104 100644
> > --- a/lib/boilerplate/setup.c
> > +++ b/lib/boilerplate/setup.c
> > @@ -55,6 +55,9 @@ static int main_init_done;
> >  
> >  static DEFINE_PRIVATE_LIST(setup_list);
> >  
> > +// serialize dlopen() init calls, which come potentially
> > multi-threaded  
> 
> Style: we use /* */ comments.
> 
> > +static pthread_mutex_t dso_init_lock = PTHREAD_MUTEX_INITIALIZER;
> > +
> >  static const struct option base_options[] = {
> >     {
> >  #define help_opt   0
> > @@ -657,7 +660,9 @@ void xenomai_init(int *argcp, char *const
> > **argvp) 
> >  void xenomai_init_dso(int *argcp, char *const **argvp)
> >  {
> > +   write_lock_nocancel(&dso_init_lock);
> >     __xenomai_init(argcp, argvp, "DSO");
> > +   write_unlock(&dso_init_lock);
> >     trace_me("DSO bootstrap done");
> >  }
> >  
> >   
> 
> Jan


_______________________________________________
Xenomai mailing list
Xenomai@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai

Reply via email to