mirror of
https://github.com/usatiuk/ficus.git
synced 2025-10-29 00:27:52 +01:00
One less leak in tasks (VMA)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user