diff --git a/src/rt/memory_region.cpp b/src/rt/memory_region.cpp index 29099fb14f27..e4130e80f5ac 100644 --- a/src/rt/memory_region.cpp +++ b/src/rt/memory_region.cpp @@ -204,14 +204,8 @@ memory_region::claim_alloc(void *mem) { void memory_region::maybe_poison(void *mem) { - // TODO: We should lock this, in case the compiler doesn't. - static int poison = -1; - if (poison < 0) { - char *env_str = getenv("RUST_POISON_ON_FREE"); - poison = env_str != NULL && env_str[0] != '\0'; - } - if (!poison) + if (!_srv->env->poison_on_free) return; # if RUSTRT_TRACK_ALLOCATIONS >= 1 diff --git a/src/rt/rust_env.cpp b/src/rt/rust_env.cpp index bdec4c284354..ab9bf9d75fa9 100644 --- a/src/rt/rust_env.cpp +++ b/src/rt/rust_env.cpp @@ -13,6 +13,7 @@ #define CHECK_CLAIMS "CHECK_CLAIMS" #define DETAILED_LEAKS "DETAILED_LEAKS" #define RUST_SEED "RUST_SEED" +#define RUST_POISON_ON_FREE "RUST_POISON_ON_FREE" #if defined(__WIN32__) static int @@ -116,6 +117,7 @@ load_env() { env->check_claims = getenv(CHECK_CLAIMS) != NULL; env->detailed_leaks = getenv(DETAILED_LEAKS) != NULL; env->rust_seed = copyenv(RUST_SEED); + env->poison_on_free = getenv(RUST_POISON_ON_FREE) != NULL; return env; } diff --git a/src/rt/rust_env.h b/src/rt/rust_env.h index eecdb7931b4f..adf3dc8a7d48 100644 --- a/src/rt/rust_env.h +++ b/src/rt/rust_env.h @@ -6,6 +6,7 @@ struct rust_env { bool check_claims; bool detailed_leaks; char* rust_seed; + bool poison_on_free; }; rust_env* load_env();