mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
594bbbf020
Except for tangential accessors such as data(), there is no more feature of FixedArray that is untested after this large expansion of its test cases. These tests, with the help of the new NoAllocationGuard, also test the allocation contract that was fixated in the last commit. Hopefully this builds confidence in future Kernel uses of FixedArray as well as its establishment in the real-time parts of the audio subsystem. I'm excited :^)
66 lines
1.4 KiB
C++
66 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2022, kleines Filmröllchen <malu.bertsch@gmail.com>.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Forward.h>
|
|
#include <AK/Noncopyable.h>
|
|
|
|
#if defined(KERNEL)
|
|
# include <Kernel/Arch/Processor.h>
|
|
# include <Kernel/Heap/kmalloc.h>
|
|
#else
|
|
# include <LibC/mallocdefs.h>
|
|
#endif
|
|
|
|
namespace AK {
|
|
|
|
class NoAllocationGuard {
|
|
AK_MAKE_NONCOPYABLE(NoAllocationGuard);
|
|
AK_MAKE_NONMOVABLE(NoAllocationGuard);
|
|
|
|
public:
|
|
NoAllocationGuard()
|
|
: m_allocation_enabled_previously(get_thread_allocation_state())
|
|
{
|
|
set_thread_allocation_state(false);
|
|
}
|
|
|
|
~NoAllocationGuard()
|
|
{
|
|
set_thread_allocation_state(m_allocation_enabled_previously);
|
|
}
|
|
|
|
private:
|
|
static bool get_thread_allocation_state()
|
|
{
|
|
#if defined(KERNEL)
|
|
return Processor::current_thread()->get_allocation_enabled();
|
|
#elif defined(__serenity__)
|
|
// This extern thread-local lives in our LibC, which doesn't exist on other systems.
|
|
return s_allocation_enabled;
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
|
|
static void set_thread_allocation_state(bool value)
|
|
{
|
|
#if defined(KERNEL)
|
|
Processor::current_thread()->set_allocation_enabled(value);
|
|
#elif defined(__serenity__)
|
|
s_allocation_enabled = value;
|
|
#else
|
|
(void)value;
|
|
#endif
|
|
}
|
|
|
|
bool m_allocation_enabled_previously { true };
|
|
};
|
|
|
|
}
|
|
|
|
using AK::NoAllocationGuard;
|