Don't leak FDT

This commit is contained in:
2024-03-26 21:09:40 +01:00
parent 0c6e4f0c3a
commit 2d37f9dad5
2 changed files with 11 additions and 4 deletions

View File

@@ -161,8 +161,13 @@ int AddressSpace::unmap(void *virt) {
return 1;
}
FDT *AddressSpace::getFdt() {
if (!_fdt) _fdt = new FDT();
return _fdt;
if (_fdt.get() == nullptr) {
LockGuard l(_fdtLock);
if (_fdt.get() == nullptr) {
_fdt = UniquePtr(new FDT());
}
}
return _fdt.get();
}
static volatile struct limine_kernel_address_request kernel_address_request = {

View File

@@ -9,6 +9,7 @@
#include <stdint.h>
#include "PointersCollection.hpp"
#include "mutex.hpp"
#define PAGE_SIZE 4096
@@ -44,9 +45,10 @@ public:
private:
// Pointer to PML4 in HHDM
uint64_t *PML4;
uint64_t *PML4;
FDT *_fdt = nullptr;
UniquePtr<FDT> _fdt;
Mutex _fdtLock;
};
extern AddressSpace *KERN_AddressSpace;