diff options
| author | Eric Holk <eholk@mozilla.com> | 2011-08-09 16:07:49 -0700 |
|---|---|---|
| committer | Eric Holk <eholk@mozilla.com> | 2011-08-15 09:26:51 -0700 |
| commit | 39b16077bbcac64eb62f484486c703aed405ef2f (patch) | |
| tree | 883cd01d305130374bb0438475716982c1c483c2 /src/rt/rust_port.cpp | |
| parent | 04af99ecb0dee1cb3df0032f7e7ba08ffc6c5bd4 (diff) | |
| download | rust-39b16077bbcac64eb62f484486c703aed405ef2f.tar.gz rust-39b16077bbcac64eb62f484486c703aed405ef2f.zip | |
Port ID-based channels.
Diffstat (limited to 'src/rt/rust_port.cpp')
| -rw-r--r-- | src/rt/rust_port.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/rt/rust_port.cpp b/src/rt/rust_port.cpp index 448babfbdee..e0d3a347b98 100644 --- a/src/rt/rust_port.cpp +++ b/src/rt/rust_port.cpp @@ -1,6 +1,9 @@ #include "rust_internal.h" #include "rust_port.h" +extern "C" CDECL rust_chan* +new_chan(rust_task *task, rust_port *port); + rust_port::rust_port(rust_task *task, size_t unit_sz) : ref_count(1), kernel(task->kernel), task(task), unit_sz(unit_sz), writers(task), chans(task) { @@ -10,6 +13,7 @@ rust_port::rust_port(rust_task *task, size_t unit_sz) PRIxPTR, (uintptr_t)task, unit_sz, (uintptr_t)this); id = task->register_port(this); + remote_chan = new_chan(task, this); } rust_port::~rust_port() { @@ -22,6 +26,9 @@ rust_port::~rust_port() { chan->disassociate(); } + remote_chan->deref(); + remote_chan = NULL; + task->release_port(id); } |
