diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2011-09-23 11:02:04 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2011-09-23 11:04:14 -0700 |
| commit | dbdeff659fb30fd845490cf215b5733e1e064d46 (patch) | |
| tree | 69d321dad8396d8f2ca5d61255253d30e50249b7 | |
| parent | f8007b5535938be4f8b774177bc96dda2e9f5a71 (diff) | |
| download | rust-dbdeff659fb30fd845490cf215b5733e1e064d46.tar.gz rust-dbdeff659fb30fd845490cf215b5733e1e064d46.zip | |
rt: Factor out the logic that handles the various magic debug environment variables
| -rw-r--r-- | src/rt/rust_cc.cpp | 11 | ||||
| -rw-r--r-- | src/rt/rust_debug.h | 33 | ||||
| -rw-r--r-- | src/rt/rust_gc.cpp | 10 |
3 files changed, 39 insertions, 15 deletions
diff --git a/src/rt/rust_cc.cpp b/src/rt/rust_cc.cpp index 1b5890358c9..4befb36d819 100644 --- a/src/rt/rust_cc.cpp +++ b/src/rt/rust_cc.cpp @@ -1,6 +1,7 @@ // Rust cycle collector. Temporary, but will probably stick around for some // time until LLVM's GC infrastructure is more mature. +#include "rust_debug.h" #include "rust_gc.h" #include "rust_internal.h" #include "rust_shape.h" @@ -434,14 +435,8 @@ do_cc(rust_task *task) { void maybe_cc(rust_task *task) { - // FIXME: We ought to lock this. - static int zeal = -1; - if (zeal == -1) { - char *ev = getenv("RUST_CC_ZEAL"); - zeal = ev && ev[0] != '\0' && ev[0] != '0'; - } - - if (zeal) + static debug::flag zeal("RUST_CC_ZEAL"); + if (*zeal) do_cc(task); } diff --git a/src/rt/rust_debug.h b/src/rt/rust_debug.h new file mode 100644 index 00000000000..f7c444324f7 --- /dev/null +++ b/src/rt/rust_debug.h @@ -0,0 +1,33 @@ +// Routines useful when debugging the Rust runtime. + +#ifndef RUST_DEBUG_H +#define RUST_DEBUG_H + +#include <cstdlib> + +namespace debug { + +class flag { +private: + const char *name; + bool valid; + bool value; + +public: + flag(const char *in_name) : name(in_name), valid(false) {} + + bool operator*() { + // FIXME: We ought to lock this. + if (!valid) { + char *ev = getenv(name); + value = ev && ev[0] != '\0' && ev[0] != '0'; + valid = true; + } + return value; + } +}; + +} // end namespace debug + +#endif + diff --git a/src/rt/rust_gc.cpp b/src/rt/rust_gc.cpp index 6e6a5dd766f..6e698de59db 100644 --- a/src/rt/rust_gc.cpp +++ b/src/rt/rust_gc.cpp @@ -7,6 +7,7 @@ #include <stdint.h> #include "rust_abi.h" +#include "rust_debug.h" #include "rust_gc.h" #include "rust_internal.h" #include "rust_shape.h" @@ -180,14 +181,9 @@ maybe_gc(rust_task *task) { if (*safe_point_data == NULL) return; - // FIXME: We ought to lock this. - static int zeal = -1; - if (zeal == -1) { - char *ev = getenv("RUST_GC_ZEAL"); - zeal = ev && ev[0] != '\0' && ev[0] != '0'; - } + static debug::flag zeal("RUST_GC_ZEAL"); - if (zeal) { + if (*zeal) { gc gc(task); gc.run(); } |
