From 98bb2b044b927e8e5a76e356b60097f0977fdbd3 2022-05-19 18:07:47 From: MH Date: 2022-05-19 18:07:47 Subject: [PATCH] Fix bug related to transferred data messages --- diff --git a/src/runtime2/component/component.rs b/src/runtime2/component/component.rs index f5e74559dca3ec8e1c6e26f10e21079df43d5b7c..67dd569364fdf0803e7cbd6e13012cdac1b22975 100644 --- a/src/runtime2/component/component.rs +++ b/src/runtime2/component/component.rs @@ -452,15 +452,6 @@ pub(crate) fn default_handle_received_data_message( // Then notify the peers that they can continue sending to this port, but // now at a new address. for received_port in &mut message.ports { - // Transfer messages to main/backup inbox - let _new_inbox_index = inbox_main.len(); - if !received_port.messages.is_empty() { - inbox_main.push(Some(received_port.messages.remove(0))); - inbox_backup.extend(received_port.messages.drain(..)); - } else { - inbox_main.push(None); - } - // Create a new port locally let mut new_port_state = received_port.state; new_port_state.set(PortStateFlag::Received); @@ -468,10 +459,25 @@ pub(crate) fn default_handle_received_data_message( received_port.peer_comp, received_port.peer_port, received_port.kind, new_port_state ); - debug_assert_eq!(_new_inbox_index, comp_ctx.get_port_index(new_port_handle)); comp_ctx.change_port_peer(sched_ctx, new_port_handle, Some(received_port.peer_comp)); let new_port = comp_ctx.get_port(new_port_handle); + // Transfer messages to main/backup inbox. Make sure to modify the + // target port to our own + for message in received_port.messages.iter_mut() { + message.data_header.target_port = new_port.self_id; + } + + let _new_inbox_index = inbox_main.len(); + if !received_port.messages.is_empty() { + inbox_main.push(Some(received_port.messages.remove(0))); + inbox_backup.extend(received_port.messages.drain(..)); + } else { + inbox_main.push(None); + } + + debug_assert_eq!(_new_inbox_index, comp_ctx.get_port_index(new_port_handle)); + // Add the port tho the consensus consensus.notify_of_new_port(_new_inbox_index, new_port_handle, comp_ctx);