Am Fri, 9 Feb 2018 17:48:22 +0100 schrieb Jan Kiszka <[email protected]>:
> 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 <[email protected]> > > --- > > 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 [email protected] https://xenomai.org/mailman/listinfo/xenomai
