--- a/pallets/scheduler/src/lib.rs +++ b/pallets/scheduler/src/lib.rs @@ -369,12 +369,7 @@ let mut total_weight: Weight = T::WeightInfo::on_initialize(0); for (order, (index, mut s)) in queued.into_iter().enumerate() { - let named = if let Some(ref id) = s.maybe_id { - Lookup::::remove(id); - true - } else { - false - }; + let named = s.maybe_id.is_some(); let (call, maybe_completed) = s.call.resolved::(); s.call = call; @@ -492,12 +487,25 @@ s.maybe_periodic = None; } let wake = now + period; + let is_canceled; + // If scheduled is named, place its information in `Lookup` if let Some(ref id) = s.maybe_id { + is_canceled = Lookup::::get(id).is_none(); let wake_index = Agenda::::decode_len(wake).unwrap_or(0); - Lookup::::insert(id, (wake, wake_index as u32)); + + if !is_canceled { + Lookup::::insert(id, (wake, wake_index as u32)); + } + } else { + is_canceled = false; + } + + if !is_canceled { + Agenda::::append(wake, Some(s)); } - Agenda::::append(wake, Some(s)); + } else if let Some(ref id) = s.maybe_id { + Lookup::::remove(id); } } // Total weight should be 0, because the transaction is already paid for