One less leak in tasks (VMA)

This commit is contained in:
2024-03-22 18:12:57 +01:00
parent f143296493
commit ac345d888d
2 changed files with 21 additions and 16 deletions

View File

@@ -96,10 +96,13 @@ Task::Task(Task::TaskMode mode, void (*entrypoint)(), const char *name) {
for (int i = 0; i < 512; i++) _fxsave->_fxsave[i] = 0;
_frame.flags = flags();
_frame.guard = IDT_GUARD;
_addressSpace = mode == TaskMode::TASKMODE_KERN ? KERN_AddressSpace : new AddressSpace();
_vma = new VMA(_addressSpace);
_frame.flags = flags();
_frame.guard = IDT_GUARD;
if (mode == TaskMode::TASKMODE_USER) {
_ownAddressSpace = UniquePtr(new AddressSpace());
_vma = UniquePtr<VMA>(new VMA(_ownAddressSpace.get()));
}
_addressSpace = mode == TaskMode::TASKMODE_KERN ? KERN_AddressSpace : _ownAddressSpace.get();
_state = TaskState::TS_BLOCKED;
_mode = mode;
_pid = max_pid.fetch_add(1);

View File

@@ -57,18 +57,20 @@ public:
uint64_t _fxsave[512] __attribute__((aligned(16)));
} __attribute__((aligned(16)));
uint64_t _entry_ksp_val;
TaskFrame _frame;
TaskPID _pid;
std::atomic<uint64_t> _used_time;
AddressSpace *_addressSpace;
VMA *_vma;
UniquePtr<KernStack> _kstack{new KernStack()};
UniquePtr<FxSave> _fxsave{new FxSave()};
String _name;
TaskMode _mode;
uint64_t _sleep_until;
TaskState _state;
uint64_t _entry_ksp_val;
TaskFrame _frame;
TaskPID _pid;
std::atomic<uint64_t> _used_time;
AddressSpace *_addressSpace;
UniquePtr<VMA> _vma;
UniquePtr<KernStack> _kstack{new KernStack()};
UniquePtr<FxSave> _fxsave{new FxSave()};
String _name;
TaskMode _mode;
uint64_t _sleep_until;
TaskState _state;
UniquePtr<AddressSpace> _ownAddressSpace;
};