diff options
| author | bors <bors@rust-lang.org> | 2013-05-18 18:37:25 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-05-18 18:37:25 -0700 |
| commit | 3ee479f3e98474cd8125432f7a0c5c18bc2bd342 (patch) | |
| tree | b105fbefbc8b0fce8abc62152a9bd6b9af1a6abe /src/rt/rust_env.cpp | |
| parent | 24c2be3323f088dc0e8024fc503198b2a535a09e (diff) | |
| parent | 8daa5ec9eac7148674cd63e5281c56925a3bc7b7 (diff) | |
| download | rust-3ee479f3e98474cd8125432f7a0c5c18bc2bd342.tar.gz rust-3ee479f3e98474cd8125432f7a0c5c18bc2bd342.zip | |
auto merge of #6577 : brson/rust/io-upstream, r=pcwalton
r? This is all of my scheduler work on #4419 from the last 3 weeks or so. I've had a few failed pull requests so far but I think the problems are ironed out. * TCP * The beginnings of runtime embedding APIs * Porting various corners of core to be compatible with both schedulers * libuv timer bindings * Further refinement of I/O error handling, including a new, incomplete, `read_error` condition * Incomplete refactoring to make tasks work without coroutines and user-space scheduling * Implementations of Reader/Writer extension methods * Implementations of the most important part of core::comm I'm particularly happy with how easy the [comm types on top of the scheduler](https://github.com/brson/rust/blob/io-upstream/src/libcore/rt/comm.rs). Note that these implementations do not use pipes. If anything here needs careful review though it's this code. This branch passes 95% of the run-pass tests (with `TESTARGS=--newrt`) In the next week I'll probably spend some time adding preliminary multithreading and seeing how close we are to removing the old runtime.
Diffstat (limited to 'src/rt/rust_env.cpp')
| -rw-r--r-- | src/rt/rust_env.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/rt/rust_env.cpp b/src/rt/rust_env.cpp index 360d6114928..ed38be3550f 100644 --- a/src/rt/rust_env.cpp +++ b/src/rt/rust_env.cpp @@ -13,6 +13,7 @@ // that might come from the environment is loaded here, once, during // init. +#include "sync/lock_and_signal.h" #include "rust_env.h" // The environment variables that the runtime knows about @@ -26,6 +27,18 @@ #define RUST_DEBUG_MEM "RUST_DEBUG_MEM" #define RUST_DEBUG_BORROW "RUST_DEBUG_BORROW" +static lock_and_signal env_lock; + +extern "C" CDECL void +rust_take_env_lock() { + env_lock.lock(); +} + +extern "C" CDECL void +rust_drop_env_lock() { + env_lock.unlock(); +} + #if defined(__WIN32__) static int get_num_cpus() { @@ -119,6 +132,8 @@ copyenv(const char* name) { rust_env* load_env(int argc, char **argv) { + scoped_lock with(env_lock); + rust_env *env = (rust_env*)malloc(sizeof(rust_env)); env->num_sched_threads = (size_t)get_num_threads(); @@ -141,3 +156,4 @@ free_env(rust_env *env) { free(env->rust_seed); free(env); } + |
