diff options
| author | Eric Holk <eholk@mozilla.com> | 2011-07-18 12:02:26 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-07-21 11:51:22 -0700 |
| commit | 3ae4dcd41e72d197e3882835253745f79588b04a (patch) | |
| tree | 38b0fa41afe156057c8913f779fda2e4ca0b08ac /src/rt/circular_buffer.cpp | |
| parent | a44fb04d57400f70ad58c1e35fc9dd9a7c43de07 (diff) | |
| download | rust-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.cpp | 22 |
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; |
