From 39b16077bbcac64eb62f484486c703aed405ef2f Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Tue, 9 Aug 2011 16:07:49 -0700 Subject: Port ID-based channels. --- src/rt/rust_port.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/rt/rust_port.cpp') 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); } -- cgit 1.4.1-3-g733a5