diff --git a/src/listhead.rs b/src/listhead.rs index 6ceccc5..a322303 100644 --- a/src/listhead.rs +++ b/src/listhead.rs @@ -77,7 +77,7 @@ impl ListHead { return self.next.upgrade().unwrap().borrow().data(); } - pub fn replace_init(head: &mut Rc::>>, + pub fn replace_init(head: &Rc::>>, pnew: &mut Rc::>>) { pnew.borrow_mut().next = head.borrow_mut().next.clone(); pnew.borrow_mut().next.upgrade().unwrap().borrow_mut().prev = Rc::downgrade(pnew); diff --git a/src/timer.rs b/src/timer.rs index 61c9d6b..c2853f9 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -167,7 +167,26 @@ impl Timer { return p; } - fn cascade(&mut self, tv: &mut [TimerListListHeadRp], index: usize) -> usize { + fn cascade(&mut self, idx: usize) -> usize { + let index = self.get_timer_index(idx); + let tv : &mut [TimerListListHeadRp]; + match idx { + 0 => { + tv = &mut self.tv2; + } + 1 => { + tv = &mut self.tv3; + } + 2 => { + tv = &mut self.tv4; + } + 3 => { + tv = &mut self.tv5; + } + _ => { + tv = &mut self.tv5; + } + } if !tv[index].borrow().empty() { let mut cascade_list = crate::ListHead::::new_head(); crate::ListHead::::replace_init @@ -194,7 +213,10 @@ impl Timer { while tick >= self.timer_tick { let index = (self.timer_tick & (TVR_MASK as i64)) as usize; if index == 0 && - self.cascade(&mut self.tv2, self.get_timer_index(0)) == 0 { + self.cascade(0) == 0 && + self.cascade(1) == 0 && + self.cascade(2) == 0 { + self.cascade(3); } self.timer_tick += 1;