rt: Make fields of rust_task_thread private where possible

This commit is contained in:
Brian Anderson 2012-03-01 21:41:11 -08:00
parent b6c57dbba2
commit 96f565492d
2 changed files with 36 additions and 39 deletions

View File

@ -23,22 +23,22 @@ rust_task_thread::rust_task_thread(rust_scheduler *sched,
int id) : int id) :
rust_thread(SCHED_STACK_SIZE), rust_thread(SCHED_STACK_SIZE),
_log(srv, this), _log(srv, this),
log_lvl(log_debug), cache(this),
id(id),
should_exit(false),
cached_c_stack(NULL),
kernel(sched->kernel),
sched(sched),
srv(srv), srv(srv),
// TODO: calculate a per scheduler name.
name("main"),
newborn_tasks(this, "newborn"), newborn_tasks(this, "newborn"),
running_tasks(this, "running"), running_tasks(this, "running"),
blocked_tasks(this, "blocked"), blocked_tasks(this, "blocked"),
dead_tasks(this, "dead"), dead_tasks(this, "dead"),
cache(this), log_lvl(log_debug),
kernel(sched->kernel),
sched(sched),
id(id),
min_stack_size(kernel->env->min_stack_size), min_stack_size(kernel->env->min_stack_size),
env(kernel->env), env(kernel->env),
should_exit(false), // TODO: calculate a per scheduler name.
cached_c_stack(NULL) name("main")
{ {
LOGPTR(this, "new dom", (uintptr_t)this); LOGPTR(this, "new dom", (uintptr_t)this);
isaac_init(kernel, &rctx); isaac_init(kernel, &rctx);

View File

@ -45,39 +45,14 @@ public:
struct rust_task_thread : public kernel_owned<rust_task_thread>, struct rust_task_thread : public kernel_owned<rust_task_thread>,
rust_thread rust_thread
{ {
private:
// Fields known only by the runtime: // Fields known only by the runtime:
rust_log _log; rust_log _log;
// NB: this is used to filter *runtime-originating* debug
// logging, on a per-scheduler basis. It's not likely what
// you want to expose to the user in terms of per-task
// or per-module logging control. By default all schedulers
// are set to debug-level logging here, and filtered by
// runtime category using the pseudo-modules ::rt::foo.
uint32_t log_lvl;
rust_srv *srv;
const char *const name;
rust_task_list newborn_tasks;
rust_task_list running_tasks;
rust_task_list blocked_tasks;
rust_task_list dead_tasks;
rust_crate_cache cache; rust_crate_cache cache;
randctx rctx;
rust_kernel *kernel;
rust_scheduler *sched;
int32_t list_index;
const int id; const int id;
lock_and_signal lock;
size_t min_stack_size;
#ifndef __WIN32__ #ifndef __WIN32__
pthread_attr_t attr; pthread_attr_t attr;
static pthread_key_t task_key; static pthread_key_t task_key;
@ -86,14 +61,10 @@ struct rust_task_thread : public kernel_owned<rust_task_thread>,
#endif #endif
static bool tls_initialized; static bool tls_initialized;
rust_env *env;
context c_context; context c_context;
bool should_exit; bool should_exit;
private:
stk_seg *cached_c_stack; stk_seg *cached_c_stack;
stk_seg *extra_c_stack; stk_seg *extra_c_stack;
@ -101,6 +72,32 @@ private:
void unprepare_c_stack(); void unprepare_c_stack();
public: public:
rust_kernel *kernel;
rust_scheduler *sched;
rust_srv *srv;
lock_and_signal lock;
rust_task_list newborn_tasks;
rust_task_list running_tasks;
rust_task_list blocked_tasks;
rust_task_list dead_tasks;
// NB: this is used to filter *runtime-originating* debug
// logging, on a per-scheduler basis. It's not likely what
// you want to expose to the user in terms of per-task
// or per-module logging control. By default all schedulers
// are set to debug-level logging here, and filtered by
// runtime category using the pseudo-modules ::rt::foo.
uint32_t log_lvl;
size_t min_stack_size;
rust_env *env;
randctx rctx;
int32_t list_index;
const char *const name;
// Only a pointer to 'name' is kept, so it must live as long as this // Only a pointer to 'name' is kept, so it must live as long as this
// domain. // domain.