diff --git a/src/runtime2/component/control_layer.rs b/src/runtime2/component/control_layer.rs index e3b2fe6ed59fa15590522db25db480dca6c7dfe8..86d9e8f1f040229c5a56a9336370a13ee9327aa6 100644 --- a/src/runtime2/component/control_layer.rs +++ b/src/runtime2/component/control_layer.rs @@ -29,7 +29,8 @@ enum ControlContent { struct ContentPeerChange { source_port: PortId, source_comp: CompId, - target_port: PortId, + old_target_port: PortId, + new_target_port: PortId, new_target_comp: CompId, schedule_entry_id: ControlId, } @@ -47,7 +48,7 @@ pub(crate) struct ControlLayer { } impl ControlLayer { - pub(crate) fn should_reroute(&self, message: &Message) -> Option { + pub(crate) fn should_reroute(&self, message: &mut Message) -> Option { // Safety note: rerouting should occur during the time when we're // notifying a peer of a new component. During this period that // component hasn't been executed yet, so cannot have died yet. @@ -60,7 +61,8 @@ impl ControlLayer { let target_port = target_port.unwrap(); for entry in &self.entries { if let ControlContent::PeerChange(entry) = &entry.content { - if entry.target_port == target_port { + if entry.old_target_port == target_port { + message.modify_target_port(entry.new_target_port); return Some(entry.new_target_comp); } } @@ -91,7 +93,7 @@ impl ControlLayer { sender_comp_id: comp_ctx.id, target_port_id: Some(content.source_port), content: ControlMessageContent::PortPeerChangedUnblock( - content.source_port, + content.new_target_port, content.new_target_comp ) }; @@ -159,7 +161,7 @@ impl ControlLayer { pub(crate) fn add_reroute_entry( &mut self, creator_comp_id: CompId, source_port_id: PortId, source_comp_id: CompId, - target_port_id: PortId, new_comp_id: CompId, + old_target_port_id: PortId, new_target_port_id: PortId, new_comp_id: CompId, schedule_entry_id: ControlId, ) -> Message { let entry_id = self.take_id(); @@ -169,7 +171,8 @@ impl ControlLayer { content: ControlContent::PeerChange(ContentPeerChange{ source_port: source_port_id, source_comp: source_comp_id, - target_port: target_port_id, + old_target_port: old_target_port_id, + new_target_port: new_target_port_id, new_target_comp: new_comp_id, schedule_entry_id, }),