diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-02-09 14:24:19 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-02-09 19:00:16 -0800 |
| commit | 421c8db14430011d40f8f8499ca4aefbcc26d07e (patch) | |
| tree | c6cc3269f99dd70e83a10335ac6bc8a6aa64c255 /src/rt/sync/rust_thread.cpp | |
| parent | 8ad9cf8087f2d1f1badfb7c8616c0b11cc4aa6db (diff) | |
| download | rust-421c8db14430011d40f8f8499ca4aefbcc26d07e.tar.gz rust-421c8db14430011d40f8f8499ca4aefbcc26d07e.zip | |
rt: Move rust_thread to its own files
Diffstat (limited to 'src/rt/sync/rust_thread.cpp')
| -rw-r--r-- | src/rt/sync/rust_thread.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/rt/sync/rust_thread.cpp b/src/rt/sync/rust_thread.cpp new file mode 100644 index 00000000000..49daaa5c96d --- /dev/null +++ b/src/rt/sync/rust_thread.cpp @@ -0,0 +1,43 @@ +#include "globals.h" +#include "rust_thread.h" + +rust_thread::rust_thread() : thread(0) { +} + +#if defined(__WIN32__) +static DWORD WINAPI +#elif defined(__GNUC__) +static void * +#else +#error "Platform not supported" +#endif +rust_thread_start(void *ptr) { + rust_thread *thread = (rust_thread *) ptr; + thread->run(); + return 0; +} + +void +rust_thread::start() { +#if defined(__WIN32__) + thread = CreateThread(NULL, 0, rust_thread_start, this, 0, NULL); +#else + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setstacksize(&attr, 1024 * 1024); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_create(&thread, &attr, rust_thread_start, (void *) this); +#endif +} + +void +rust_thread::join() { +#if defined(__WIN32__) + if (thread) + WaitForSingleObject(thread, INFINITE); +#else + if (thread) + pthread_join(thread, NULL); +#endif + thread = 0; +} |
