diff --git a/src/rt/rust_chan.cpp b/src/rt/rust_chan.cpp
index 4c17663671361..97683c6876cb7 100644
--- a/src/rt/rust_chan.cpp
+++ b/src/rt/rust_chan.cpp
@@ -70,6 +70,7 @@ void rust_chan::disassociate() {
  * Attempt to send data to the associated port.
  */
 void rust_chan::send(void *sptr) {
+    scoped_lock with(task->kernel->scheduler_lock);
     buffer.enqueue(sptr);
 
     rust_scheduler *sched = task->sched;