A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
further codacy cleanups
[simgrid.git]
/
src
/
simix
/
smx_context.cpp
diff --git
a/src/simix/smx_context.cpp
b/src/simix/smx_context.cpp
index
b382461
..
b9911d1
100644
(file)
--- a/
src/simix/smx_context.cpp
+++ b/
src/simix/smx_context.cpp
@@
-100,12
+100,26
@@
void SIMIX_context_mod_init()
{
xbt_assert(simix_global->context_factory == nullptr);
-#if HAVE_THREAD_CONTEXTS &&
!
HAVE_THREAD_LOCAL_STORAGE
+#if HAVE_THREAD_CONTEXTS &&
not
HAVE_THREAD_LOCAL_STORAGE
/* the __thread storage class is not available on this platform:
* use getspecific/setspecific instead to store the current context in each thread */
xbt_os_thread_key_create(&smx_current_context_key);
#endif
+#if defined(__APPLE__) || defined(__NetBSD__)
+ if (context_factory_name == std::string("thread") &&
+ strcmp(xbt_cfg_get_string("smpi/privatization"), "dlopen") == 0) {
+ XBT_WARN("dlopen+thread broken on Apple and BSD. Switching to raw contexts.");
+ context_factory_name = "raw";
+ }
+#endif
+#if defined(__FreeBSD__)
+ if (context_factory_name == std::string("thread") && strcmp(xbt_cfg_get_string("smpi/privatization"), "no") != 0) {
+ XBT_WARN("mmap broken on FreeBSD, but dlopen+thread broken too. Switching to dlopen+raw contexts.");
+ context_factory_name = "raw";
+ }
+#endif
+
/* select the context factory to use to create the contexts */
if (simgrid::kernel::context::factory_initializer) { // Give Java a chance to hijack the factory mechanism
simix_global->context_factory = simgrid::kernel::context::factory_initializer();
@@
-157,19
+171,19
@@
void *SIMIX_context_stack_new()
* growing downward (PTH_STACKGROWTH == -1). Protected pages need to be put
* after the stack when PTH_STACKGROWTH == 1. */
- if (smx_context_guard_size > 0 &&
!
MC_is_active()) {
+ if (smx_context_guard_size > 0 &&
not
MC_is_active()) {
#if !defined(PTH_STACKGROWTH) || (PTH_STACKGROWTH != -1)
static int warned_once = 0;
- if (
!
warned_once) {
+ if (
not
warned_once) {
XBT_WARN("Stack overflow protection is known to be broken on your system. Either stack grows upwards, or it was not even tested properly.");
warned_once = 1;
}
#endif
size_t size = smx_context_stack_size + smx_context_guard_size;
-#if HAVE_MC
- /* Cannot use posix_memalign when HAVE_MC. Align stack by hand, and save the
+#if
SIMGRID_
HAVE_MC
+ /* Cannot use posix_memalign when
SIMGRID_
HAVE_MC. Align stack by hand, and save the
* pointer returned by xbt_malloc0. */
char *alloc = (char*)xbt_malloc0(size + xbt_pagesize);
stack = alloc - ((uintptr_t)alloc & (xbt_pagesize - 1)) + xbt_pagesize;
@@
-207,7
+221,7
@@
void *SIMIX_context_stack_new()
void SIMIX_context_stack_delete(void *stack)
{
- if (
!
stack)
+ if (
not
stack)
return;
#if HAVE_VALGRIND_H
@@
-217,13
+231,13
@@
void SIMIX_context_stack_delete(void *stack)
#endif
#ifndef _WIN32
- if (smx_context_guard_size > 0 &&
!
MC_is_active()) {
+ if (smx_context_guard_size > 0 &&
not
MC_is_active()) {
stack = (char *)stack - smx_context_guard_size;
if (mprotect(stack, smx_context_guard_size, PROT_READ | PROT_WRITE) == -1) {
XBT_WARN("Failed to remove page protection: %s", strerror(errno));
/* try to pursue anyway */
}
-#if HAVE_MC
+#if
SIMGRID_
HAVE_MC
/* Retrieve the saved pointer. See SIMIX_context_stack_new above. */
stack = *((void **)stack - 1);
#endif
@@
-260,7
+274,7
@@
void SIMIX_context_set_nthreads(int nb_threads) {
if (nb_threads<=0) {
nb_threads = xbt_os_get_numcores();
XBT_INFO("Auto-setting contexts/nthreads to %d",nb_threads);
- }
+ }
#if !HAVE_THREAD_CONTEXTS
xbt_assert(nb_threads == 1, "Parallel runs are impossible when the pthreads are missing.");
#endif