diff options
author | Idan Horowitz <idan.horowitz@gmail.com> | 2022-01-20 21:10:46 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-01-21 16:27:21 +0100 |
commit | d65347d39dd89013a0c46d8206c77e65d6dceda1 (patch) | |
tree | 01695d1306f8fe444fc558262ae31d4a0e1441d4 /Kernel/Memory/RingBuffer.cpp | |
parent | 9eccd4c56e09fb5b7a08e4288d174f5a27c75695 (diff) | |
download | serenity-d65347d39dd89013a0c46d8206c77e65d6dceda1.zip |
Kernel: Make Memory::RingBuffer construction fallible
Diffstat (limited to 'Kernel/Memory/RingBuffer.cpp')
-rw-r--r-- | Kernel/Memory/RingBuffer.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/Kernel/Memory/RingBuffer.cpp b/Kernel/Memory/RingBuffer.cpp index 388e4ae1fe..ca0f38602e 100644 --- a/Kernel/Memory/RingBuffer.cpp +++ b/Kernel/Memory/RingBuffer.cpp @@ -10,8 +10,15 @@ namespace Kernel::Memory { -RingBuffer::RingBuffer(StringView region_name, size_t capacity) - : m_region(MM.allocate_contiguous_kernel_region(page_round_up(capacity).release_value_but_fixme_should_propagate_errors(), region_name, Region::Access::Read | Region::Access::Write).release_value()) +ErrorOr<NonnullOwnPtr<RingBuffer>> RingBuffer::try_create(StringView region_name, size_t capacity) +{ + auto region_size = TRY(page_round_up(capacity)); + auto region = TRY(MM.allocate_contiguous_kernel_region(region_size, region_name, Region::Access::Read | Region::Access::Write)); + return adopt_nonnull_own_or_enomem(new (nothrow) RingBuffer(move(region), capacity)); +} + +RingBuffer::RingBuffer(NonnullOwnPtr<Memory::Region> region, size_t capacity) + : m_region(move(region)) , m_capacity_in_bytes(capacity) { } |