File tree 2 files changed +14
-4
lines changed
2 files changed +14
-4
lines changed Original file line number Diff line number Diff line change @@ -111,9 +111,6 @@ impl FrameAllocator {
111
111
let size = count. next_power_of_two ( ) ;
112
112
let class = size. trailing_zeros ( ) as usize ;
113
113
114
- // Put back into free list
115
- self . free_list [ class] . insert ( frame) ;
116
-
117
114
// Merge free buddy lists
118
115
let mut current_ptr = frame;
119
116
let mut current_class = class;
@@ -123,8 +120,8 @@ impl FrameAllocator {
123
120
// Free buddy found
124
121
current_ptr = min ( current_ptr, buddy) ;
125
122
current_class += 1 ;
126
- self . free_list [ current_class] . insert ( current_ptr) ;
127
123
} else {
124
+ self . free_list [ current_class] . insert ( current_ptr) ;
128
125
break ;
129
126
}
130
127
}
Original file line number Diff line number Diff line change @@ -132,3 +132,16 @@ fn test_frame_allocator_alloc_and_free() {
132
132
frame. dealloc ( addr, 512 ) ;
133
133
}
134
134
}
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