From 421c8db14430011d40f8f8499ca4aefbcc26d07e Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 9 Feb 2012 14:24:19 -0800 Subject: [PATCH] rt: Move rust_thread to its own files --- mk/rt.mk | 2 ++ src/rt/rust_task_thread.h | 1 + src/rt/sync/rust_thread.cpp | 43 +++++++++++++++++++++++++++++++++++++ src/rt/sync/rust_thread.h | 26 ++++++++++++++++++++++ src/rt/sync/sync.cpp | 41 ----------------------------------- src/rt/sync/sync.h | 22 ------------------- 6 files changed, 72 insertions(+), 63 deletions(-) create mode 100644 src/rt/sync/rust_thread.cpp create mode 100644 src/rt/sync/rust_thread.h diff --git a/mk/rt.mk b/mk/rt.mk index e07bec1487fd..2a53cac4abb8 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -37,6 +37,7 @@ RUNTIME_CS_$(1) := \ rt/sync/timer.cpp \ rt/sync/sync.cpp \ rt/sync/lock_and_signal.cpp \ + rt/sync/rust_thread.cpp \ rt/rust.cpp \ rt/rust_builtin.cpp \ rt/rust_run_program.cpp \ @@ -97,6 +98,7 @@ RUNTIME_HDR_$(1) := rt/globals.h \ rt/sync/timer.h \ rt/sync/lock_and_signal.h \ rt/sync/lock_free_queue.h \ + rt/sync/rust_thread.h \ rt/rust_srv.h \ rt/rust_kernel.h \ rt/memory_region.h \ diff --git a/src/rt/rust_task_thread.h b/src/rt/rust_task_thread.h index 82609bc887a4..66d3d00f2a61 100644 --- a/src/rt/rust_task_thread.h +++ b/src/rt/rust_task_thread.h @@ -1,6 +1,7 @@ #ifndef RUST_TASK_THREAD_H #define RUST_TASK_THREAD_H +#include "sync/rust_thread.h" #include "rust_stack.h" #include "context.h" diff --git a/src/rt/sync/rust_thread.cpp b/src/rt/sync/rust_thread.cpp new file mode 100644 index 000000000000..49daaa5c96db --- /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; +} diff --git a/src/rt/sync/rust_thread.h b/src/rt/sync/rust_thread.h new file mode 100644 index 000000000000..1c27d1b6597b --- /dev/null +++ b/src/rt/sync/rust_thread.h @@ -0,0 +1,26 @@ +#ifndef RUST_THREAD_H +#define RUST_THREAD_H + +/** + * Thread utility class. Derive and implement your own run() method. + */ +class rust_thread { +public: +#if defined(__WIN32__) + HANDLE thread; +#else + pthread_t thread; +#endif + rust_thread(); + void start(); + + virtual void run() { + return; + } + + void join(); + + virtual ~rust_thread() {} // quiet the compiler +}; + +#endif /* RUST_THREAD_H */ diff --git a/src/rt/sync/sync.cpp b/src/rt/sync/sync.cpp index 31162d35b031..3bf37986161b 100644 --- a/src/rt/sync/sync.cpp +++ b/src/rt/sync/sync.cpp @@ -18,44 +18,3 @@ void sync::sleep(size_t timeout_in_ms) { usleep(timeout_in_ms * 1000); #endif } - -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; -} diff --git a/src/rt/sync/sync.h b/src/rt/sync/sync.h index 9c911e2c929a..3bd36f5c5662 100644 --- a/src/rt/sync/sync.h +++ b/src/rt/sync/sync.h @@ -33,26 +33,4 @@ public: } }; -/** - * Thread utility class. Derive and implement your own run() method. - */ -class rust_thread { -public: -#if defined(__WIN32__) - HANDLE thread; -#else - pthread_t thread; -#endif - rust_thread(); - void start(); - - virtual void run() { - return; - } - - void join(); - - virtual ~rust_thread() {} // quiet the compiler -}; - #endif /* SYNC_H */