MCPcopy Create free account
hub / github.com/LibertyOS-Development/kernel / alloc

Method alloc

src/allocator/fixedsize.rs:64–90  ·  view source on GitHub ↗
(&self, layout: Layout)

Source from the content-addressed store, hash-verified

62unsafe impl GlobalAlloc for Locked<FixedSizeBlockAlloc>
63{
64 unsafe fn alloc(&self, layout: Layout) -> *mut u8
65 {
66 let mut allocator = self.lock();
67 match lsidx(&layout)
68 {
69 Some(index) =>
70 {
71 match allocator.listheads[index].take()
72 {
73 Some(node) =>
74 {
75 allocator.listheads[index] = node.next.take();
76 node as *mut ListNode as *mut u8
77 }
78 None =>
79 {
80 // If no block exists in list, allocate a new block.
81 let blksize = BLKSIZES[index];
82 let blkalign = blksize;
83 let layout = Layout::from_size_align(blksize, blkalign).unwrap();
84 allocator.fballoc(layout)
85 }
86 }
87 }
88 None => allocator.fballoc(layout),
89 }
90 }
91
92 unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout)
93 {

Callers

nothing calls this directly

Calls 3

lsidxFunction · 0.85
lockMethod · 0.80
fballocMethod · 0.80

Tested by

no test coverage detected