about summary refs log tree commit diff
path: root/src/rt/rust_builtin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/rust_builtin.cpp')
-rw-r--r--src/rt/rust_builtin.cpp24
1 files changed, 1 insertions, 23 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index d37245c29a4..b6ad9397e9c 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -544,29 +544,7 @@ rust_task_yield(rust_task *task, bool *killed) {
 
 extern "C" CDECL void
 port_recv(uintptr_t *dptr, rust_port *port, uintptr_t *yield) {
-    *yield = false;
-    rust_task *task = rust_task_thread::get_task();
-    {
-        scoped_lock with(port->lock);
-
-        LOG(task, comm, "port: 0x%" PRIxPTR ", dptr: 0x%" PRIxPTR
-            ", size: 0x%" PRIxPTR,
-            (uintptr_t) port, (uintptr_t) dptr, port->unit_sz);
-
-        if (port->receive(dptr)) {
-            return;
-        }
-
-        // No data was buffered on any incoming channel, so block this task on
-        // the port. Remember the rendezvous location so that any sender task
-        // can write to it before waking up this task.
-
-        LOG(task, comm, "<=== waiting for rendezvous data ===");
-        task->rendezvous_ptr = dptr;
-        task->block(port, "waiting for rendezvous data");
-    }
-    *yield = true;
-    return;
+    port->receive(dptr, yield);
 }
 
 extern "C" CDECL void