about summary refs log tree commit diff
path: root/src/rt/rust_port.cpp
diff options
context:
space:
mode:
authorEric Holk <eholk@mozilla.com>2011-08-09 16:07:49 -0700
committerEric Holk <eholk@mozilla.com>2011-08-15 09:26:51 -0700
commit39b16077bbcac64eb62f484486c703aed405ef2f (patch)
tree883cd01d305130374bb0438475716982c1c483c2 /src/rt/rust_port.cpp
parent04af99ecb0dee1cb3df0032f7e7ba08ffc6c5bd4 (diff)
downloadrust-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.cpp7
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);
 }