Re: [PATCH v5 04/26] rust: alloc: implement `Allocator` for `Kmalloc`
From: Benno Lossin
Date: Wed Aug 14 2024 - 13:03:16 EST
On 14.08.24 18:59, Danilo Krummrich wrote:
> On Wed, Aug 14, 2024 at 04:21:38PM +0000, Benno Lossin wrote:
>> On 12.08.24 20:22, Danilo Krummrich wrote:
>>> + unsafe fn call(
>>> + &self,
>>> + ptr: Option<NonNull<u8>>,
>>> + layout: Layout,
>>> + flags: Flags,
>>> + ) -> Result<NonNull<[u8]>, AllocError> {
>>> + let size = aligned_size(layout);
>>> + let ptr = match ptr {
>>> + Some(ptr) => ptr.as_ptr(),
>>> + None => ptr::null(),
>>> + };
>>> +
>>> + // SAFETY: `ptr` is either NULL or valid by the safety requirements of this function.
>>> + let raw_ptr = unsafe {
>>> + // If `size == 0` and `ptr != NULL` the memory behind the pointer is freed.
>>> + self.0(ptr.cast(), size, flags.0).cast()
>>> + };
>>> +
>>> + let ptr = if size == 0 {
>>
>> Why do you do this check *after* calling `self.0`?
>
> Because I need `raw_ptr` in the else case below.
But you can just return early above? I would prefer the check be done
before `self.0` is called.
---
Cheers,
Benno