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?

> 
> 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
-- 
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

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

Reply via email to