From: Martin Quinson Date: Fri, 24 Jun 2022 23:11:09 +0000 (+0200) Subject: Make sure that sthread_inside_simgrid is initially 1 to protect all lib constructors X-Git-Tag: v3.32~187 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f2792e5909cc863fb914f60a25a0cfe007e213dd Make sure that sthread_inside_simgrid is initially 1 to protect all lib constructors Even the ones that we don't control, such as gdb's... In addition, there is no need to define sthread_inside_simgrid in libsimgrid. We can keep it to libsthread where it belongs. Also do some other cleanups around. --- diff --git a/examples/sthread/pthread-mutex-simple.c b/examples/sthread/pthread-mutex-simple.c index ae928c28bd..f39de639fd 100644 --- a/examples/sthread/pthread-mutex-simple.c +++ b/examples/sthread/pthread-mutex-simple.c @@ -27,8 +27,8 @@ int main(int argc, char* argv[]) pthread_mutex_init(&mutex, NULL); pthread_t thread1, thread2; - fprintf(stderr, "prout\n"); pthread_create(&thread1, NULL, thread1_fun, NULL); + fprintf(stderr, "here\n"); pthread_create(&thread2, NULL, thread2_fun, NULL); // pthread_join(thread1, NULL); // pthread_join(thread2, NULL); diff --git a/src/sthread/sthread.c b/src/sthread/sthread.c index 4c36bd7514..b9934341b2 100644 --- a/src/sthread/sthread.c +++ b/src/sthread/sthread.c @@ -5,6 +5,9 @@ #include #include #include +#include + +int sthread_inside_simgrid = 1; // whether sthread should leave pthread operations, or intercept them. /* We don't want to intercept pthread within simgrid. Instead we should provide the real implem to simgrid */ static int (*raw_pthread_create)(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*); @@ -187,7 +190,7 @@ int __libc_start_main(int (*main)(int, char**, char**), int argc, char** argv, i /* Find the real __libc_start_main()... */ typeof(&__libc_start_main) orig = dlsym(RTLD_NEXT, "__libc_start_main"); - + fprintf(stderr, "__libc_start_main\n"); /* ... and call it with our custom main function */ return orig(main_hook, argc, argv, init, fini, rtld_fini, stack_end); } \ No newline at end of file diff --git a/src/sthread/sthread_impl.cpp b/src/sthread/sthread_impl.cpp index d2bb5d674c..8dce02fb65 100644 --- a/src/sthread/sthread_impl.cpp +++ b/src/sthread/sthread_impl.cpp @@ -1,11 +1,5 @@ /* SimGrid's pthread interposer. Actual implementation of the symbols (see the comment in sthread.h) */ -#include -#include -#include -#include -#include - #include "smpi/smpi.h" #include #include @@ -18,6 +12,14 @@ #include "src/internal_config.h" #include "src/sthread/sthread.h" +#include +#include +#include +#include +#include +#include +#include + XBT_LOG_NEW_DEFAULT_CATEGORY(sthread, "pthread intercepter"); namespace sg4 = simgrid::s4u; @@ -25,16 +27,18 @@ static sg4::Host* lilibeth = NULL; int sthread_main(int argc, char** argv, char** envp, int (*raw_main)(int, char**, char**)) { - XBT_INFO("sthread main() is starting"); - sthread_inside_simgrid = 1; + std::ostringstream id; + id << std::this_thread::get_id(); + + XBT_INFO("sthread main() is starting in thread %s", id.str().c_str()); sg4::Engine e(&argc, argv); auto* zone = sg4::create_full_zone("world"); lilibeth = zone->create_host("Lilibeth", 1e15); zone->seal(); - sthread_inside_simgrid = 0; /* Launch the user's main() on an actor */ + sthread_inside_simgrid = 0; sg4::ActorPtr main_actor = sg4::Actor::create("tid 0", lilibeth, raw_main, argc, argv, envp); XBT_INFO("sthread main() is launching the simulation"); @@ -62,8 +66,6 @@ int sthread_create(unsigned long int* thread, const /*pthread_attr_t*/ void* att { static int TID = 1; - if (TID == 0) { - } TID++; int rank = 0; #if HAVE_SMPI diff --git a/src/xbt/log.cpp b/src/xbt/log.cpp index bdb7d6fa27..11681b205a 100644 --- a/src/xbt/log.cpp +++ b/src/xbt/log.cpp @@ -247,8 +247,6 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority if (category->initialized) return priority >= category->threshold; - int old_inside_simgrid = sthread_inside_simgrid; - sthread_inside_simgrid = 1; if (log_cat_init_mutex != nullptr) log_cat_init_mutex->lock(); @@ -296,7 +294,6 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority category->initialized = 1; if (log_cat_init_mutex != nullptr) log_cat_init_mutex->unlock(); - sthread_inside_simgrid = old_inside_simgrid; return priority >= category->threshold; } diff --git a/src/xbt/xbt_main.cpp b/src/xbt/xbt_main.cpp index f45256509c..d9e473e749 100644 --- a/src/xbt/xbt_main.cpp +++ b/src/xbt/xbt_main.cpp @@ -41,8 +41,6 @@ std::string binary_name; /* Name of the system process containing us (m std::vector cmdline; /* all we got in argv */ } // namespace simgrid::xbt -int sthread_inside_simgrid = 0; // whether sthread should leave pthread operations or intercept them. - int xbt_initialized = 0; simgrid::config::Flag cfg_dbg_clean_atexit{ "debug/clean-atexit", @@ -82,7 +80,6 @@ static BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserv static void xbt_preinit() { - sthread_inside_simgrid = 1; #ifdef _WIN32 SYSTEM_INFO si; GetSystemInfo(&si); @@ -102,7 +99,6 @@ static void xbt_preinit() xbt_log_preinit(); xbt_dict_preinit(); atexit(xbt_postexit); - sthread_inside_simgrid = 0; } static void xbt_postexit()