From: Martin Quinson Date: Sat, 5 Jan 2019 01:28:55 +0000 (+0100) Subject: make xbt_os_thread_self() useless, and kill it X-Git-Tag: v3_22~682 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/aa8c0aedd4f2031f1a7356a5b0ff6569ab262b64 make xbt_os_thread_self() useless, and kill it Also remove every parts of xbt_os_thread_t that I managed to make useless --- diff --git a/ChangeLog b/ChangeLog index ad00e70ee9..99d68e9271 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,7 @@ XBT: - Drop several unused xbt_os_thread_t functions: - xbt_os_thread_get_extra_data() - xbt_os_thread_set_extra_data() + - xbt_os_thread_self() - xbt_os_thread_self_name() Fixed bugs: diff --git a/include/xbt/xbt_os_thread.h b/include/xbt/xbt_os_thread.h index 5c90354c6f..7d1e18fe13 100644 --- a/include/xbt/xbt_os_thread.h +++ b/include/xbt/xbt_os_thread.h @@ -26,10 +26,9 @@ SG_BEGIN_DECL() /** @brief Thread data type (opaque structure) */ typedef struct xbt_os_thread_ *xbt_os_thread_t; -XBT_PUBLIC xbt_os_thread_t xbt_os_thread_create(const char* name, pvoid_f_pvoid_t start_routine, void* param); +XBT_PUBLIC xbt_os_thread_t xbt_os_thread_create(pvoid_f_pvoid_t start_routine, void* param); XBT_PUBLIC void xbt_os_thread_exit(int* retcode); -XBT_PUBLIC xbt_os_thread_t xbt_os_thread_self(void); /* xbt_os_thread_join frees the joined thread (ie the XBT wrapper around it, the OS frees the rest) */ XBT_PUBLIC void xbt_os_thread_join(xbt_os_thread_t thread, void** thread_return); XBT_PUBLIC void xbt_os_thread_setstacksize(int stack_size); diff --git a/src/include/xbt/parmap.hpp b/src/include/xbt/parmap.hpp index 5f97049f11..c5c79a6ee0 100644 --- a/src/include/xbt/parmap.hpp +++ b/src/include/xbt/parmap.hpp @@ -168,7 +168,7 @@ template Parmap::Parmap(unsigned num_workers, e_xbt_parmap_mode_ unsigned int core_bind = 0; for (unsigned i = 1; i < num_workers; i++) { ThreadData* data = new ThreadData(*this, i); - this->workers[i] = xbt_os_thread_create(nullptr, worker_main, data); + this->workers[i] = xbt_os_thread_create(worker_main, data); xbt_os_thread_bind(this->workers[i], core_bind); if (core_bind != std::thread::hardware_concurrency() - 1) core_bind++; diff --git a/src/kernel/context/ContextThread.cpp b/src/kernel/context/ContextThread.cpp index 3f93201506..01c084ed24 100644 --- a/src/kernel/context/ContextThread.cpp +++ b/src/kernel/context/ContextThread.cpp @@ -69,9 +69,7 @@ ThreadContext::ThreadContext(std::function code, void_pfn_smxprocess_t c xbt_os_thread_setguardsize(smx_context_guard_size); /* create and start the process */ - /* NOTE: The first argument to xbt_os_thread_create used to be the process * - * name, but now the name is stored at SIMIX level, so we pass a null */ - this->thread_ = xbt_os_thread_create(nullptr, ThreadContext::wrapper, this); + this->thread_ = xbt_os_thread_create(ThreadContext::wrapper, this); /* wait the starting of the newly created process */ this->end_.acquire(); } diff --git a/src/xbt/xbt_os_thread.c b/src/xbt/xbt_os_thread.c index a84ba938aa..a469b4d050 100644 --- a/src/xbt/xbt_os_thread.c +++ b/src/xbt/xbt_os_thread.c @@ -45,18 +45,15 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_sync_os, xbt, "Synchronization mechanism (OS typedef struct xbt_os_thread_ { pthread_t t; - char *name; void *param; pvoid_f_pvoid_t start_routine; } s_xbt_os_thread_t; static xbt_os_thread_t main_thread = NULL; /* thread-specific data containing the xbt_os_thread_t structure */ -static pthread_key_t xbt_self_thread_key; static int thread_mod_inited = 0; /* defaults attribute for pthreads */ -//FIXME: find where to put this static pthread_attr_t thread_attr; /* frees the xbt_os_thread_t corresponding to the current thread */ @@ -64,7 +61,6 @@ static void xbt_os_thread_free_thread_data(xbt_os_thread_t thread) { if (thread == main_thread) /* just killed main thread */ main_thread = NULL; - free(thread->name); free(thread); } @@ -73,19 +69,10 @@ void xbt_os_thread_mod_preinit(void) if (thread_mod_inited) return; - int errcode = pthread_key_create(&xbt_self_thread_key, NULL); - xbt_assert(errcode == 0, "pthread_key_create failed for xbt_self_thread_key"); - main_thread = xbt_new(s_xbt_os_thread_t, 1); - main_thread->name = NULL; - main_thread->name = xbt_strdup("main"); main_thread->param = NULL; main_thread->start_routine = NULL; - if ((errcode = pthread_setspecific(xbt_self_thread_key, main_thread))) - THROWF(system_error, errcode, - "Impossible to set the SimGrid identity descriptor to the main thread (pthread_setspecific failed)"); - pthread_attr_init(&thread_attr); thread_mod_inited = 1; @@ -93,13 +80,6 @@ void xbt_os_thread_mod_preinit(void) void xbt_os_thread_mod_postexit(void) { - /* FIXME: don't try to free our key on shutdown. - Valgrind detects no leak if we don't, and whine if we try to */ - // int errcode; - - // if ((errcode=pthread_key_delete(xbt_self_thread_key))) - // THROWF(system_error,errcode,"pthread_key_delete failed for xbt_self_thread_key"); - free(main_thread->name); free(main_thread); main_thread = NULL; thread_mod_inited = 0; @@ -122,16 +102,12 @@ static void *wrapper_start_routine(void *s) { xbt_os_thread_t t = s; - int errcode = pthread_setspecific(xbt_self_thread_key, t); - xbt_assert(errcode == 0, "pthread_setspecific failed for xbt_self_thread_key"); - return t->start_routine(t->param); } -xbt_os_thread_t xbt_os_thread_create(const char* name, pvoid_f_pvoid_t start_routine, void* param) +xbt_os_thread_t xbt_os_thread_create(pvoid_f_pvoid_t start_routine, void* param) { xbt_os_thread_t res_thread = xbt_new(s_xbt_os_thread_t, 1); - res_thread->name = xbt_strdup(name); res_thread->start_routine = start_routine; res_thread->param = param; @@ -215,14 +191,6 @@ void xbt_os_thread_exit(int *retval) pthread_exit(retval); } -xbt_os_thread_t xbt_os_thread_self(void ) -{ - if (!thread_mod_inited) - return NULL; - - return pthread_getspecific(xbt_self_thread_key); -} - /****** mutex related functions ******/ typedef struct xbt_os_mutex_ { pthread_mutex_t m; diff --git a/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.c b/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.c index 5d32c4e0f3..b2962c1294 100644 --- a/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.c +++ b/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.c @@ -39,14 +39,10 @@ static int crasher() id = xbt_new0(int, crasher_amount); xbt_os_thread_t* crashers = xbt_new(xbt_os_thread_t, crasher_amount); - for (int i = 0; i < crasher_amount; i++) - id[i] = i; - /* spawn threads */ for (int i = 0; i < crasher_amount; i++) { - char name[16]; - snprintf(name, sizeof name, "thread %d", i); - crashers[i] = xbt_os_thread_create(name, &crasher_thread, &id[i]); + id[i] = i; + crashers[i] = xbt_os_thread_create(&crasher_thread, &id[i]); } /* wait for them */ diff --git a/teshsuite/xbt/parmap_test/parmap_test.cpp b/teshsuite/xbt/parmap_test/parmap_test.cpp index 0a11d62d00..687b0792d1 100644 --- a/teshsuite/xbt/parmap_test/parmap_test.cpp +++ b/teshsuite/xbt/parmap_test/parmap_test.cpp @@ -13,6 +13,8 @@ #include #include #include // std::iota +#include +#include #include XBT_LOG_NEW_DEFAULT_CATEGORY(parmap_test, "Test for parmap"); @@ -50,9 +52,11 @@ static int test_parmap_basic(e_xbt_parmap_mode_t mode) return ret; } -static void fun_get_id(uintptr_t* arg) +static void fun_get_id(std::string* arg) { - *arg = (uintptr_t)xbt_os_thread_self(); + std::stringstream ss; + ss << std::this_thread::get_id(); + *arg = ss.str(); xbt_os_sleep(0.05); } @@ -63,9 +67,9 @@ static int test_parmap_extended(e_xbt_parmap_mode_t mode) for (unsigned num_workers = 1; num_workers <= 16; num_workers *= 2) { const unsigned len = 2 * num_workers; - simgrid::xbt::Parmap parmap(num_workers, mode); - std::vector a(len); - std::vector data(len); + simgrid::xbt::Parmap parmap(num_workers, mode); + std::vector a(len); + std::vector data(len); std::iota(begin(data), end(data), &a[0]); parmap.apply(fun_get_id, data);