File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -111,9 +111,6 @@ impl FrameAllocator {
111111 let size = count. next_power_of_two ( ) ;
112112 let class = size. trailing_zeros ( ) as usize ;
113113
114- // Put back into free list
115- self . free_list [ class] . insert ( frame) ;
116-
117114 // Merge free buddy lists
118115 let mut current_ptr = frame;
119116 let mut current_class = class;
@@ -123,8 +120,8 @@ impl FrameAllocator {
123120 // Free buddy found
124121 current_ptr = min ( current_ptr, buddy) ;
125122 current_class += 1 ;
126- self . free_list [ current_class] . insert ( current_ptr) ;
127123 } else {
124+ self . free_list [ current_class] . insert ( current_ptr) ;
128125 break ;
129126 }
130127 }
Original file line number Diff line number Diff line change @@ -132,3 +132,16 @@ fn test_frame_allocator_alloc_and_free() {
132132 frame. dealloc ( addr, 512 ) ;
133133 }
134134}
135+
136+ #[ test]
137+ fn test_frame_allocator_alloc_and_free_complex ( ) {
138+ let mut frame = FrameAllocator :: new ( ) ;
139+ frame. add_frame ( 100 , 1024 ) ;
140+ for _ in 0 ..10 {
141+ let addr = frame. alloc ( 1 ) . unwrap ( ) ;
142+ frame. dealloc ( addr, 1 ) ;
143+ }
144+ let addr1 = frame. alloc ( 1 ) . unwrap ( ) ;
145+ let addr2 = frame. alloc ( 1 ) . unwrap ( ) ;
146+ assert_ne ! ( addr1, addr2) ;
147+ }
You can’t perform that action at this time.
0 commit comments