diff options
| author | Dirkjan Bussink <d.bussink@gmail.com> | 2013-11-05 14:13:02 +0100 |
|---|---|---|
| committer | Dirkjan Bussink <d.bussink@gmail.com> | 2013-11-05 17:49:46 +0100 |
| commit | 47e0bd403a04d26506f723ac44ee9ea0aa5d3ad5 (patch) | |
| tree | 5471652a73737a511636093172321b7d1dc06130 /src/rt/sync/rust_thread.cpp | |
| parent | 92065ceb634872f53a1a402cf306fbf02550b00d (diff) | |
| download | rust-47e0bd403a04d26506f723ac44ee9ea0aa5d3ad5.tar.gz rust-47e0bd403a04d26506f723ac44ee9ea0aa5d3ad5.zip | |
Move implementation for threads to Rust
This binds to the appropriate pthreads_* and Windows specific functions and calls them from Rust. This allows for removal of the C++ support code for threads. Fixes #10162
Diffstat (limited to 'src/rt/sync/rust_thread.cpp')
| -rw-r--r-- | src/rt/sync/rust_thread.cpp | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/src/rt/sync/rust_thread.cpp b/src/rt/sync/rust_thread.cpp deleted file mode 100644 index 7223d187137..00000000000 --- a/src/rt/sync/rust_thread.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or -// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - - -#include "rust_thread.h" -#include <limits.h> - -const size_t default_stack_sz = 1024*1024; - -rust_thread::rust_thread() : thread(0) { -} - -rust_thread::~rust_thread() { -} - -#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, default_stack_sz, rust_thread_start, this, 0, NULL); -#else - // PTHREAD_STACK_MIN of some system is larger than default size - // so we check stack_sz to prevent assertion failure. - size_t stack_sz = default_stack_sz; - if (stack_sz < PTHREAD_STACK_MIN) { - stack_sz = PTHREAD_STACK_MIN; - } - pthread_attr_t attr; - CHECKED(pthread_attr_init(&attr)); - CHECKED(pthread_attr_setstacksize(&attr, stack_sz)); - CHECKED(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)); - CHECKED(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) - CHECKED(pthread_join(thread, NULL)); -#endif - thread = 0; -} |
