about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJon Morton <jonanin@gmail.com>2012-04-01 22:18:40 -0500
committerJon Morton <jonanin@gmail.com>2012-04-01 22:18:40 -0500
commit128a8b6ed500f74fa802aa9749b3b7a19ebfffc9 (patch)
tree659d9f43bfe1768ab509892e739fd3aa015ac38f
parent413994ea3eed976a6fe97f3d6cfeb0c2f453e77f (diff)
downloadrust-128a8b6ed500f74fa802aa9749b3b7a19ebfffc9.tar.gz
rust-128a8b6ed500f74fa802aa9749b3b7a19ebfffc9.zip
remove rust_srv
-rw-r--r--mk/rt.mk1
-rw-r--r--src/rt/circular_buffer.cpp8
-rw-r--r--src/rt/memory_region.cpp16
-rw-r--r--src/rt/memory_region.h6
-rw-r--r--src/rt/rust.cpp4
-rw-r--r--src/rt/rust_internal.h1
-rw-r--r--src/rt/rust_kernel.cpp11
-rw-r--r--src/rt/rust_kernel.h6
-rw-r--r--src/rt/rust_log.cpp7
-rw-r--r--src/rt/rust_log.h4
-rw-r--r--src/rt/rust_sched_launcher.cpp9
-rw-r--r--src/rt/rust_sched_launcher.h4
-rw-r--r--src/rt/rust_sched_loop.cpp8
-rw-r--r--src/rt/rust_sched_loop.h4
-rw-r--r--src/rt/rust_scheduler.cpp8
-rw-r--r--src/rt/rust_scheduler.h4
-rw-r--r--src/rt/rust_srv.cpp86
-rw-r--r--src/rt/rust_srv.h29
-rw-r--r--src/rt/rust_task.cpp2
19 files changed, 44 insertions, 174 deletions
diff --git a/mk/rt.mk b/mk/rt.mk
index eee3f9cf3ea..b24d98b40f8 100644
--- a/mk/rt.mk
+++ b/mk/rt.mk
@@ -64,7 +64,6 @@ RUNTIME_CS_$(1) := \
               rt/rust_port_selector.cpp \
               rt/circular_buffer.cpp \
               rt/isaac/randport.cpp \
-              rt/rust_srv.cpp \
               rt/rust_kernel.cpp \
               rt/rust_shape.cpp \
               rt/rust_abi.cpp \
diff --git a/src/rt/circular_buffer.cpp b/src/rt/circular_buffer.cpp
index a4f73f2362a..58e14412e46 100644
--- a/src/rt/circular_buffer.cpp
+++ b/src/rt/circular_buffer.cpp
@@ -24,8 +24,12 @@ circular_buffer::circular_buffer(rust_kernel *kernel, size_t unit_sz) :
 circular_buffer::~circular_buffer() {
     KLOG(kernel, mem, "~circular_buffer 0x%" PRIxPTR, this);
     assert(_buffer);
-    W(kernel, _unread == 0,
-      "freeing circular_buffer with %d unread bytes", _unread);
+    if (_unread != 0) {
+        fprintf(stderr, "warning: freeing circular_buffer with"
+                " %lu unread bytes", _unread);
+        fflush(stderr);
+    }
+
     kernel->free(_buffer);
 }
 
diff --git a/src/rt/memory_region.cpp b/src/rt/memory_region.cpp
index baa6e9ed369..c5c36b2b5f3 100644
--- a/src/rt/memory_region.cpp
+++ b/src/rt/memory_region.cpp
@@ -23,14 +23,14 @@ void *memory_region::get_data(alloc_header *ptr) {
     return (void*)((char *)ptr + HEADER_SIZE);
 }
 
-memory_region::memory_region(rust_srv *srv, bool synchronized) :
-    _srv(srv), _parent(NULL), _live_allocations(0),
-    _detailed_leaks(srv->env->detailed_leaks),
+memory_region::memory_region(rust_env *env, bool synchronized) :
+    _env(env), _parent(NULL), _live_allocations(0),
+    _detailed_leaks(env->detailed_leaks),
     _synchronized(synchronized) {
 }
 
 memory_region::memory_region(memory_region *parent) :
-    _srv(parent->_srv), _parent(parent), _live_allocations(0),
+    _env(parent->_env), _parent(parent), _live_allocations(0),
     _detailed_leaks(parent->_detailed_leaks),
     _synchronized(parent->_synchronized) {
 }
@@ -59,7 +59,7 @@ void memory_region::free(void *mem) {
     }
     release_alloc(mem);
     maybe_poison(mem);
-    _srv->free(alloc);
+    ::free(alloc);
 }
 
 void *
@@ -74,7 +74,7 @@ memory_region::realloc(void *mem, size_t orig_size) {
 #   endif
 
     size_t size = orig_size + HEADER_SIZE;
-    alloc_header *newMem = (alloc_header *)_srv->realloc(alloc, size);
+    alloc_header *newMem = (alloc_header *)::realloc(alloc, size);
 
 #   if RUSTRT_TRACK_ALLOCATIONS >= 1
     assert(newMem->magic == MAGIC);
@@ -105,7 +105,7 @@ void *
 memory_region::malloc(size_t size, const char *tag, bool zero) {
     size_t old_size = size;
     size += HEADER_SIZE;
-    alloc_header *mem = (alloc_header *)_srv->malloc(size);
+    alloc_header *mem = (alloc_header *)::malloc(size);
 
 #   if RUSTRT_TRACK_ALLOCATIONS >= 1
     mem->magic = MAGIC;
@@ -222,7 +222,7 @@ memory_region::claim_alloc(void *mem) {
 void
 memory_region::maybe_poison(void *mem) {
 
-    if (!_srv->env->poison_on_free)
+    if (!_env->poison_on_free)
         return;
 
 #   if RUSTRT_TRACK_ALLOCATIONS >= 1
diff --git a/src/rt/memory_region.h b/src/rt/memory_region.h
index 68b4165edc6..ee15bf00437 100644
--- a/src/rt/memory_region.h
+++ b/src/rt/memory_region.h
@@ -22,7 +22,7 @@
 // hugely expensive and should only be used as a last resort.
 #define RUSTRT_TRACK_ALLOCATIONS 0
 
-class rust_srv;
+class rust_env;
 
 class memory_region {
 private:
@@ -42,7 +42,7 @@ private:
     inline alloc_header *get_header(void *mem);
     inline void *get_data(alloc_header *);
 
-    rust_srv *_srv;
+    rust_env *_env;
     memory_region *_parent;
     int _live_allocations;
     array_list<alloc_header *> _allocation_list;
@@ -58,7 +58,7 @@ private:
     void claim_alloc(void *mem);
 
 public:
-    memory_region(rust_srv *srv, bool synchronized);
+    memory_region(rust_env *env, bool synchronized);
     memory_region(memory_region *parent);
     void *malloc(size_t size, const char *tag, bool zero = true);
     void *calloc(size_t size, const char *tag);
diff --git a/src/rt/rust.cpp b/src/rt/rust.cpp
index 00657f8ec0a..695132979be 100644
--- a/src/rt/rust.cpp
+++ b/src/rt/rust.cpp
@@ -75,8 +75,7 @@ rust_start(uintptr_t main_fn, int argc, char **argv, void* crate_map) {
     update_log_settings(crate_map, env->logspec);
     check_claims = env->check_claims;
 
-    rust_srv *srv = new rust_srv(env);
-    rust_kernel *kernel = new rust_kernel(srv);
+    rust_kernel *kernel = new rust_kernel(env);
     rust_sched_id sched_id = kernel->create_scheduler(env->num_sched_threads);
     rust_scheduler *sched = kernel->get_scheduler_by_id(sched_id);
     rust_task *root_task = sched->create_task(NULL, "main");
@@ -96,7 +95,6 @@ rust_start(uintptr_t main_fn, int argc, char **argv, void* crate_map) {
     int ret = kernel->wait_for_exit();
     delete args;
     delete kernel;
-    delete srv;
 
     free_env(env);
 
diff --git a/src/rt/rust_internal.h b/src/rt/rust_internal.h
index 27f4336f49e..bcf88cfcaf1 100644
--- a/src/rt/rust_internal.h
+++ b/src/rt/rust_internal.h
@@ -95,7 +95,6 @@ template <typename T> struct region_owned {
 struct rust_cond { };
 
 #include "memory_region.h"
-#include "rust_srv.h"
 #include "rust_log.h"
 #include "rust_kernel.h"
 #include "rust_sched_loop.h"
diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp
index 8c2b0030bce..b52166e469a 100644
--- a/src/rt/rust_kernel.cpp
+++ b/src/rt/rust_kernel.cpp
@@ -9,16 +9,15 @@
 #define KLOG_ERR_(field, ...)                   \
     KLOG_LVL(this, field, log_err, __VA_ARGS__)
 
-rust_kernel::rust_kernel(rust_srv *srv) :
-    _region(srv, true),
-    _log(srv, NULL),
-    srv(srv),
+rust_kernel::rust_kernel(rust_env *env) :
+    _region(env, true),
+    _log(env, NULL),
     max_task_id(0),
     max_port_id(0),
     rval(0),
     max_sched_id(0),
     sched_reaper(this),
-    env(srv->env)
+    env(env)
 {
 }
 
@@ -69,7 +68,7 @@ rust_kernel::create_scheduler(size_t num_threads) {
         id = max_sched_id++;
         assert(id != INTPTR_MAX && "Hit the maximum scheduler id");
         sched = new (this, "rust_scheduler")
-            rust_scheduler(this, srv, num_threads, id);
+            rust_scheduler(this, num_threads, id);
         bool is_new = sched_table
             .insert(std::pair<rust_sched_id,
                               rust_scheduler*>(id, sched)).second;
diff --git a/src/rt/rust_kernel.h b/src/rt/rust_kernel.h
index 78548917ee5..7e3640f0631 100644
--- a/src/rt/rust_kernel.h
+++ b/src/rt/rust_kernel.h
@@ -22,9 +22,6 @@ class rust_kernel {
     memory_region _region;
     rust_log _log;
 
-public:
-    rust_srv *srv;
-private:
     // The next task id
     rust_task_id max_task_id;
 
@@ -50,10 +47,9 @@ private:
     rust_sched_reaper sched_reaper;
 
 public:
-
     struct rust_env *env;
 
-    rust_kernel(rust_srv *srv);
+    rust_kernel(rust_env *env);
 
     void log(uint32_t level, char const *fmt, ...);
     void fatal(char const *fmt, ...);
diff --git a/src/rt/rust_log.cpp b/src/rt/rust_log.cpp
index ce40eaa3a47..f6ca280d8f0 100644
--- a/src/rt/rust_log.cpp
+++ b/src/rt/rust_log.cpp
@@ -40,8 +40,8 @@ log_console_off(rust_env *env) {
     }
 }
 
-rust_log::rust_log(rust_srv *srv, rust_sched_loop *sched_loop) :
-    _srv(srv),
+rust_log::rust_log(rust_env *env, rust_sched_loop *sched_loop) :
+    _env(env),
     _sched_loop(sched_loop) {
 }
 
@@ -98,7 +98,8 @@ rust_log::trace_ln(char *prefix, char *message) {
     append_string(buffer, "%s", prefix);
     append_string(buffer, "%s", message);
     if (_log_to_console) {
-        _srv->log(buffer);
+        fprintf(stderr, "rust: %s\n", buffer);
+        fflush(stderr);
     }
     _log_lock.unlock();
 }
diff --git a/src/rt/rust_log.h b/src/rt/rust_log.h
index 77449a516d0..362e9564f68 100644
--- a/src/rt/rust_log.h
+++ b/src/rt/rust_log.h
@@ -40,7 +40,7 @@ struct rust_task;
 class rust_log {
 
 public:
-    rust_log(rust_srv *srv, rust_sched_loop *sched_loop);
+    rust_log(rust_env *env, rust_sched_loop *sched_loop);
     virtual ~rust_log();
 
     void trace_ln(rust_task *task, uint32_t level, char *message);
@@ -48,7 +48,7 @@ public:
     bool is_tracing(uint32_t type_bits);
 
 private:
-    rust_srv *_srv;
+    rust_env *_env;
     rust_sched_loop *_sched_loop;
     bool _use_labels;
     void trace_ln(rust_task *task, char *message);
diff --git a/src/rt/rust_sched_launcher.cpp b/src/rt/rust_sched_launcher.cpp
index 424922edd8f..7111cbb804b 100644
--- a/src/rt/rust_sched_launcher.cpp
+++ b/src/rt/rust_sched_launcher.cpp
@@ -3,16 +3,15 @@
 
 const size_t SCHED_STACK_SIZE = 1024*100;
 
-rust_sched_launcher::rust_sched_launcher(rust_scheduler *sched,
-                                         rust_srv *srv, int id)
+rust_sched_launcher::rust_sched_launcher(rust_scheduler *sched, int id)
     : kernel(sched->kernel),
-      sched_loop(sched, srv, id),
+      sched_loop(sched, id),
       driver(&sched_loop) {
 }
 
 rust_thread_sched_launcher::rust_thread_sched_launcher(rust_scheduler *sched,
-                                                       rust_srv *srv, int id)
-    : rust_sched_launcher(sched, srv, id),
+                                                       int id)
+    : rust_sched_launcher(sched, id),
       rust_thread(SCHED_STACK_SIZE) {
 }
 
diff --git a/src/rt/rust_sched_launcher.h b/src/rt/rust_sched_launcher.h
index d738b3d0ca0..e5b230fce4d 100644
--- a/src/rt/rust_sched_launcher.h
+++ b/src/rt/rust_sched_launcher.h
@@ -16,7 +16,7 @@ protected:
     rust_sched_driver driver;
 
 public:
-    rust_sched_launcher(rust_scheduler *sched, rust_srv *srv, int id);
+    rust_sched_launcher(rust_scheduler *sched, int id);
     virtual ~rust_sched_launcher() { }
 
     virtual void start() = 0;
@@ -28,7 +28,7 @@ class rust_thread_sched_launcher
   :public rust_sched_launcher,
    private rust_thread {
 public:
-    rust_thread_sched_launcher(rust_scheduler *sched, rust_srv *srv, int id);
+    rust_thread_sched_launcher(rust_scheduler *sched, int id);
     virtual void start() { rust_thread::start(); }
     virtual void run() { driver.start_main_loop(); }
     virtual void join() { rust_thread::join(); }
diff --git a/src/rt/rust_sched_loop.cpp b/src/rt/rust_sched_loop.cpp
index 1b22dcfdbba..52fb17d9f98 100644
--- a/src/rt/rust_sched_loop.cpp
+++ b/src/rt/rust_sched_loop.cpp
@@ -17,10 +17,8 @@ const size_t C_STACK_SIZE = 1024*1024;
 
 bool rust_sched_loop::tls_initialized = false;
 
-rust_sched_loop::rust_sched_loop(rust_scheduler *sched,
-                                   rust_srv *srv,
-                                   int id) :
-    _log(srv, this),
+rust_sched_loop::rust_sched_loop(rust_scheduler *sched,int id) :
+    _log(env, this),
     id(id),
     should_exit(false),
     cached_c_stack(NULL),
@@ -28,10 +26,10 @@ rust_sched_loop::rust_sched_loop(rust_scheduler *sched,
     pump_signal(NULL),
     kernel(sched->kernel),
     sched(sched),
-    srv(srv),
     log_lvl(log_debug),
     min_stack_size(kernel->env->min_stack_size),
     env(kernel->env),
+    local_region(env, false),
     // TODO: calculate a per scheduler name.
     name("main")
 {
diff --git a/src/rt/rust_sched_loop.h b/src/rt/rust_sched_loop.h
index 795bca702fd..cd95323f913 100644
--- a/src/rt/rust_sched_loop.h
+++ b/src/rt/rust_sched_loop.h
@@ -69,7 +69,6 @@ private:
 public:
     rust_kernel *kernel;
     rust_scheduler *sched;
-    rust_srv *srv;
 
     // NB: this is used to filter *runtime-originating* debug
     // logging, on a per-scheduler basis. It's not likely what
@@ -81,6 +80,7 @@ public:
 
     size_t min_stack_size;
     rust_env *env;
+    memory_region local_region;
 
     randctx rctx;
 
@@ -90,7 +90,7 @@ public:
 
     // Only a pointer to 'name' is kept, so it must live as long as this
     // domain.
-    rust_sched_loop(rust_scheduler *sched, rust_srv *srv, int id);
+    rust_sched_loop(rust_scheduler *sched, int id);
     void activate(rust_task *task);
     void log(rust_task *task, uint32_t level, char const *fmt, ...);
     rust_log & get_log();
diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp
index 40d62c76849..582289a3182 100644
--- a/src/rt/rust_scheduler.cpp
+++ b/src/rt/rust_scheduler.cpp
@@ -3,12 +3,9 @@
 #include "rust_sched_launcher.h"
 
 rust_scheduler::rust_scheduler(rust_kernel *kernel,
-                               rust_srv *srv,
                                size_t num_threads,
                                rust_sched_id id) :
     kernel(kernel),
-    srv(srv),
-    env(srv->env),
     live_threads(num_threads),
     live_tasks(0),
     num_threads(num_threads),
@@ -24,10 +21,9 @@ rust_scheduler::~rust_scheduler() {
 
 rust_sched_launcher *
 rust_scheduler::create_task_thread(int id) {
-    rust_srv *srv = this->srv->clone();
     rust_sched_launcher *thread =
         new (kernel, "rust_thread_sched_launcher")
-        rust_thread_sched_launcher(this, srv, id);
+        rust_thread_sched_launcher(this, id);
     KLOG(kernel, kern, "created task thread: " PTR ", id: %d",
           thread, id);
     return thread;
@@ -36,9 +32,7 @@ rust_scheduler::create_task_thread(int id) {
 void
 rust_scheduler::destroy_task_thread(rust_sched_launcher *thread) {
     KLOG(kernel, kern, "deleting task thread: " PTR, thread);
-    rust_srv *srv = thread->get_loop()->srv;
     delete thread;
-    delete srv;
 }
 
 void
diff --git a/src/rt/rust_scheduler.h b/src/rt/rust_scheduler.h
index 722a7e168fb..cd98992b917 100644
--- a/src/rt/rust_scheduler.h
+++ b/src/rt/rust_scheduler.h
@@ -9,8 +9,6 @@ class rust_scheduler : public kernel_owned<rust_scheduler> {
     // FIXME: Make these private
 public:
     rust_kernel *kernel;
-    rust_srv *srv;
-    rust_env *env;
 private:
     // Protects live_threads and cur_thread increments
     lock_and_signal lock;
@@ -34,7 +32,7 @@ private:
     void exit();
 
 public:
-    rust_scheduler(rust_kernel *kernel, rust_srv *srv, size_t num_threads,
+    rust_scheduler(rust_kernel *kernel, size_t num_threads,
                    rust_sched_id id);
     ~rust_scheduler();
 
diff --git a/src/rt/rust_srv.cpp b/src/rt/rust_srv.cpp
deleted file mode 100644
index 0d59c1cfee1..00000000000
--- a/src/rt/rust_srv.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-#include "rust_internal.h"
-#include "rust_srv.h"
-
-rust_srv::rust_srv(rust_env *env) :
-    env(env),
-    local_region(this, false) {
-}
-
-void
-rust_srv::free(void *p) {
-    ::free(p);
-}
-
-void *
-rust_srv::malloc(size_t bytes) {
-    return ::malloc(bytes);
-}
-
-void *
-rust_srv::realloc(void *p, size_t bytes) {
-    return ::realloc(p, bytes);
-}
-
-void
-rust_srv::log(char const *msg) {
-    fprintf(stderr, "rust: %s\n", msg);
-    // FIXME: flushing each time is expensive, but at the moment
-    // necessary to get output through before a rust_task::fail
-    // call. This should be changed.
-    fflush(stderr);
-}
-
-void
-rust_srv::fatal(const char *expression,
-    const char *file,
-    size_t line,
-    const char *format,
-    ...) {
-    char buf[BUF_BYTES];
-    va_list args;
-    va_start(args, format);
-    vsnprintf(buf, sizeof(buf), format, args);
-    va_end(args);
-
-    char msg[BUF_BYTES];
-    snprintf(msg, sizeof(msg),
-             "fatal, '%s' failed, %s:%d %s",
-             expression, file, (int)line, buf);
-    log(msg);
-    abort();
-}
-
-void
-rust_srv::warning(char const *expression,
-    char const *file,
-    size_t line,
-    const char *format,
-    ...) {
-    char buf[BUF_BYTES];
-    va_list args;
-    va_start(args, format);
-    vsnprintf(buf, sizeof(buf), format, args);
-    va_end(args);
-
-    char msg[BUF_BYTES];
-    snprintf(msg, sizeof(msg),
-             "warning: '%s', at: %s:%d %s",
-             expression, file, (int)line, buf);
-    log(msg);
-}
-
-rust_srv *
-rust_srv::clone() {
-    return new rust_srv(env);
-}
-
-//
-// Local Variables:
-// mode: C++
-// fill-column: 78;
-// indent-tabs-mode: nil
-// c-basic-offset: 4
-// buffer-file-coding-system: utf-8-unix
-// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
-// End:
-//
diff --git a/src/rt/rust_srv.h b/src/rt/rust_srv.h
deleted file mode 100644
index 2a28e49a556..00000000000
--- a/src/rt/rust_srv.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// -*- c++ -*-
-#ifndef RUST_SRV_H
-#define RUST_SRV_H
-
-#include "rust_internal.h"
-
-class rust_srv {
-public:
-    rust_env *env;
-    memory_region local_region;
-    void log(char const *msg);
-    void fatal(char const *expression,
-        char const *file,
-        size_t line,
-        char const *format,
-        ...);
-    void warning(char const *expression,
-        char const *file,
-        size_t line,
-        char const *format,
-        ...);
-    void free(void *);
-    void *malloc(size_t);
-    void *realloc(void *, size_t);
-    rust_srv(rust_env *);
-    rust_srv *clone();
-};
-
-#endif /* RUST_SRV_H */
diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp
index f9e092d3661..bb8db18bd08 100644
--- a/src/rt/rust_task.cpp
+++ b/src/rt/rust_task.cpp
@@ -27,7 +27,7 @@ rust_task::rust_task(rust_sched_loop *sched_loop, rust_task_state state,
     name(name),
     list_index(-1),
     rendezvous_ptr(0),
-    local_region(&sched_loop->srv->local_region),
+    local_region(&sched_loop->local_region),
     boxed(&local_region),
     unwinding(false),
     propagate_failure(true),