about summary refs log tree commit diff
path: root/src/rt/circular_buffer.cpp
diff options
context:
space:
mode:
authorEric Holk <eholk@mozilla.com>2011-07-18 12:02:26 -0700
committerBrian Anderson <banderson@mozilla.com>2011-07-21 11:51:22 -0700
commit3ae4dcd41e72d197e3882835253745f79588b04a (patch)
tree38b0fa41afe156057c8913f779fda2e4ca0b08ac /src/rt/circular_buffer.cpp
parenta44fb04d57400f70ad58c1e35fc9dd9a7c43de07 (diff)
downloadrust-3ae4dcd41e72d197e3882835253745f79588b04a.tar.gz
rust-3ae4dcd41e72d197e3882835253745f79588b04a.zip
Lots of work on memory tracking and channels.
We're trying to get closer to doing correct move semantics for channel
operations. This involves a lot of cleanup (such as removing the
unused sched parameter from rust_vec constructor) and making
circular_buffer kernel_owned.

Added tagging for memory allocations. This means we give a string tag
to everything we allocate. If we leak something and TRACK_ALLOCATIONS
is enabled, then it's much easier now to tell exactly what is leaking.
Diffstat (limited to 'src/rt/circular_buffer.cpp')
-rw-r--r--src/rt/circular_buffer.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/rt/circular_buffer.cpp b/src/rt/circular_buffer.cpp
index 18f56d3b6cd..b645a08e563 100644
--- a/src/rt/circular_buffer.cpp
+++ b/src/rt/circular_buffer.cpp
@@ -4,14 +4,14 @@
 
 #include "rust_internal.h"
 
-circular_buffer::circular_buffer(rust_task *task, size_t unit_sz) :
-    sched(task->sched),
-    task(task),
+circular_buffer::circular_buffer(rust_kernel *kernel, size_t unit_sz) :
+    sched(kernel->sched),
+    kernel(kernel),
     unit_sz(unit_sz),
     _buffer_sz(initial_size()),
     _next(0),
     _unread(0),
-    _buffer((uint8_t *)task->malloc(_buffer_sz)) {
+    _buffer((uint8_t *)kernel->malloc(_buffer_sz, "circular_buffer")) {
 
     A(sched, unit_sz, "Unit size must be larger than zero.");
 
@@ -20,7 +20,6 @@ circular_buffer::circular_buffer(rust_task *task, size_t unit_sz) :
          _buffer_sz, _unread, this);
 
     A(sched, _buffer, "Failed to allocate buffer.");
-    task->ref();
 }
 
 circular_buffer::~circular_buffer() {
@@ -28,8 +27,7 @@ circular_buffer::~circular_buffer() {
     I(sched, _buffer);
     W(sched, _unread == 0,
       "freeing circular_buffer with %d unread bytes", _unread);
-    task->free(_buffer);
-    --task->ref_count;
+    kernel->free(_buffer);
 }
 
 size_t
@@ -144,9 +142,10 @@ circular_buffer::grow() {
     size_t new_buffer_sz = _buffer_sz * 2;
     I(sched, new_buffer_sz <= MAX_CIRCULAR_BUFFER_SIZE);
     DLOG(sched, mem, "circular_buffer is growing to %d bytes", new_buffer_sz);
-    void *new_buffer = task->malloc(new_buffer_sz);
+    void *new_buffer = kernel->malloc(new_buffer_sz,
+                                    "new circular_buffer (grow)");
     transfer(new_buffer);
-    task->free(_buffer);
+    kernel->free(_buffer);
     _buffer = (uint8_t *)new_buffer;
     _next = 0;
     _buffer_sz = new_buffer_sz;
@@ -158,9 +157,10 @@ circular_buffer::shrink() {
     I(sched, initial_size() <= new_buffer_sz);
     DLOG(sched, mem, "circular_buffer is shrinking to %d bytes",
          new_buffer_sz);
-    void *new_buffer = task->malloc(new_buffer_sz);
+    void *new_buffer = kernel->malloc(new_buffer_sz,
+                                    "new circular_buffer (shrink)");
     transfer(new_buffer);
-    task->free(_buffer);
+    kernel->free(_buffer);
     _buffer = (uint8_t *)new_buffer;
     _next = 0;
     _buffer_sz = new_buffer_sz;