diff options
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); } |
