Prevent dangling pointer

This commit is contained in:
Alex 2023-03-14 06:24:02 +02:00
parent 855384aead
commit d7c9b7ab02
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
23 changed files with 91 additions and 90 deletions

View File

@ -49,7 +49,7 @@ namespace Disk
memcpy(&drive->Table, RWBuffer, sizeof(PartitionTable)); memcpy(&drive->Table, RWBuffer, sizeof(PartitionTable));
/* /*
----> Add to devfs the disk TODO: Add to devfs the disk
*/ */
if (drive->Table.GPT.Signature == GPT_MAGIC) if (drive->Table.GPT.Signature == GPT_MAGIC)
@ -101,7 +101,7 @@ namespace Disk
sprintf(PartitionName, "sd%ldp%ld", drives.size() - 1, partition->Index); sprintf(PartitionName, "sd%ldp%ld", drives.size() - 1, partition->Index);
/* /*
----> Add to devfs the disk TODO: Add to devfs the disk
*/ */
delete[] PartitionName; delete[] PartitionName;
@ -131,7 +131,7 @@ namespace Disk
sprintf(PartitionName, "sd%ldp%ld", drives.size() - 1, partition->Index); sprintf(PartitionName, "sd%ldp%ld", drives.size() - 1, partition->Index);
/* /*
----> Add to devfs the disk TODO: Add to devfs the disk
*/ */
delete[] PartitionName; delete[] PartitionName;

View File

@ -41,13 +41,14 @@ namespace Driver
debug("Stopping & unloading driver %ld [%#lx]", drv->DriverUID, drv->Address); debug("Stopping & unloading driver %ld [%#lx]", drv->DriverUID, drv->Address);
DriverManager->IOCB(drv->DriverUID, (void *)&callback); DriverManager->IOCB(drv->DriverUID, (void *)&callback);
delete drv->MemTrk; delete drv->MemTrk, drv->MemTrk = nullptr;
for (size_t j = 0; j < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); j++) for (size_t j = 0; j < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); j++)
{ {
if (!drv->InterruptHook[j]) if (!drv->InterruptHook[j])
continue; continue;
delete drv->InterruptHook[j]; delete drv->InterruptHook[j], drv->InterruptHook[j] = nullptr;
} }
delete drv, drv = nullptr;
Drivers.remove(i); Drivers.remove(i);
} }
} }
@ -65,13 +66,14 @@ namespace Driver
debug("Stopping and unloading driver %ld [%#lx]", drv->DriverUID, drv->Address); debug("Stopping and unloading driver %ld [%#lx]", drv->DriverUID, drv->Address);
this->IOCB(drv->DriverUID, (void *)&callback); this->IOCB(drv->DriverUID, (void *)&callback);
delete drv->MemTrk; delete drv->MemTrk, drv->MemTrk = nullptr;
for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++) for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++)
{ {
if (!drv->InterruptHook[i]) if (!drv->InterruptHook[i])
continue; continue;
delete drv->InterruptHook[i]; delete drv->InterruptHook[i], drv->InterruptHook[i] = nullptr;
} }
delete drv, drv = nullptr;
Drivers.remove(i); Drivers.remove(i);
return true; return true;
} }

View File

@ -50,13 +50,13 @@ namespace Driver
int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback); int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback);
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
delete mem; delete mem, mem = nullptr;
error("Driver %s is not implemented", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
else if (CallbackRet != DriverReturnCode::OK) else if (CallbackRet != DriverReturnCode::OK)
{ {
delete mem; delete mem, mem = nullptr;
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
@ -98,7 +98,7 @@ namespace Driver
if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK) if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK)
{ {
delete mem; delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
debug("Starting driver %s (offset: %#lx)", fexExtended->Driver.Name, fex); debug("Starting driver %s (offset: %#lx)", fexExtended->Driver.Name, fex);
@ -110,7 +110,7 @@ namespace Driver
default: default:
{ {
warn("Unknown driver type: %d", fexExtended->Driver.Type); warn("Unknown driver type: %d", fexExtended->Driver.Type);
delete mem; delete mem, mem = nullptr;
return DriverCode::UNKNOWN_DRIVER_TYPE; return DriverCode::UNKNOWN_DRIVER_TYPE;
} }
} }

View File

@ -103,7 +103,7 @@ namespace Driver
} }
fixme("Display driver: %s", fexExtended->Driver.Name); fixme("Display driver: %s", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
@ -147,7 +147,7 @@ namespace Driver
} }
fixme("Network driver: %s", fexExtended->Driver.Name); fixme("Network driver: %s", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
@ -208,13 +208,13 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s is not implemented", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
else if (CallbackRet != DriverReturnCode::OK) else if (CallbackRet != DriverReturnCode::OK)
{ {
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete mem; delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
@ -267,7 +267,7 @@ namespace Driver
} }
fixme("Filesystem driver: %s", fexExtended->Driver.Name); fixme("Filesystem driver: %s", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
@ -347,15 +347,15 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s is not implemented", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete InterruptHook; delete InterruptHook, InterruptHook = nullptr;
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
else if (CallbackRet != DriverReturnCode::OK) else if (CallbackRet != DriverReturnCode::OK)
{ {
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete InterruptHook; delete InterruptHook, InterruptHook = nullptr;
delete mem; delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
@ -412,7 +412,7 @@ namespace Driver
} }
fixme("Audio driver: %s", fexExtended->Driver.Name); fixme("Audio driver: %s", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
@ -435,7 +435,7 @@ namespace Driver
if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK) if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK)
{ {
delete mem; delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
debug("Starting driver %s (offset: %#lx)", fexExtended->Driver.Name, fex); debug("Starting driver %s (offset: %#lx)", fexExtended->Driver.Name, fex);
@ -459,7 +459,7 @@ namespace Driver
default: default:
{ {
warn("Unknown driver type: %d", fexExtended->Driver.Type); warn("Unknown driver type: %d", fexExtended->Driver.Type);
delete mem; delete mem, mem = nullptr;
return DriverCode::UNKNOWN_DRIVER_TYPE; return DriverCode::UNKNOWN_DRIVER_TYPE;
} }
} }

View File

@ -167,7 +167,7 @@ namespace Driver
} }
fixme("Generic driver: %s", fexExtended->Driver.Name); fixme("Generic driver: %s", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
@ -211,7 +211,7 @@ namespace Driver
} }
fixme("Display driver: %s", fexExtended->Driver.Name); fixme("Display driver: %s", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
@ -266,8 +266,8 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s is not implemented", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
delete InterruptHook; delete InterruptHook, InterruptHook = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
else if (CallbackRet == DriverReturnCode::OK) else if (CallbackRet == DriverReturnCode::OK)
@ -275,8 +275,8 @@ namespace Driver
else else
{ {
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete mem; delete mem, mem = nullptr;
delete InterruptHook; delete InterruptHook, InterruptHook = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
@ -340,7 +340,7 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s is not implemented", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
else if (CallbackRet == DriverReturnCode::OK) else if (CallbackRet == DriverReturnCode::OK)
@ -348,7 +348,7 @@ namespace Driver
else else
{ {
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete mem; delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
@ -402,7 +402,7 @@ namespace Driver
} }
fixme("Filesystem driver: %s", fexExtended->Driver.Name); fixme("Filesystem driver: %s", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
@ -446,7 +446,7 @@ namespace Driver
} }
fixme("Input driver: %s", fexExtended->Driver.Name); fixme("Input driver: %s", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
@ -501,7 +501,7 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s is not implemented", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete mem; delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED; return DriverCode::NOT_IMPLEMENTED;
} }
else if (CallbackRet == DriverReturnCode::OK) else if (CallbackRet == DriverReturnCode::OK)
@ -509,7 +509,7 @@ namespace Driver
else else
{ {
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete mem; delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
@ -562,7 +562,7 @@ namespace Driver
if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK) if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK)
{ {
delete mem; delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR; return DriverCode::DRIVER_RETURNED_ERROR;
} }
debug("Starting driver %s", fexExtended->Driver.Name); debug("Starting driver %s", fexExtended->Driver.Name);
@ -588,7 +588,7 @@ namespace Driver
default: default:
{ {
warn("Unknown driver type: %d", fexExtended->Driver.Type); warn("Unknown driver type: %d", fexExtended->Driver.Type);
delete mem; delete mem, mem = nullptr;
return DriverCode::UNKNOWN_DRIVER_TYPE; return DriverCode::UNKNOWN_DRIVER_TYPE;
} }
} }

View File

@ -74,8 +74,9 @@ namespace Video
if (this->Buffers[Index] == nullptr) if (this->Buffers[Index] == nullptr)
return; return;
KernelAllocator.FreePages(this->Buffers[Index]->Buffer, TO_PAGES(this->Buffers[Index]->Size)); KernelAllocator.FreePages(this->Buffers[Index]->Buffer, TO_PAGES(this->Buffers[Index]->Size));
this->Buffers[Index]->Buffer = nullptr;
this->Buffers[Index]->Checksum = 0; // Making sure that the buffer is not used anymore this->Buffers[Index]->Checksum = 0; // Making sure that the buffer is not used anymore
delete this->Buffers[Index]; delete this->Buffers[Index], this->Buffers[Index] = nullptr;
} }
void Display::SetBufferCursor(int Index, uint32_t X, uint32_t Y) void Display::SetBufferCursor(int Index, uint32_t X, uint32_t Y)

View File

@ -39,7 +39,7 @@ namespace Execute
uintptr_t *TmpBuffer = new uintptr_t[0x1000]; uintptr_t *TmpBuffer = new uintptr_t[0x1000];
*(int *)TmpBuffer = 2545; *(int *)TmpBuffer = 2545;
InterProcessCommunication::IPCErrorCode ret = Process->IPC->Write(Handle->ID, TmpBuffer, 0x1000); InterProcessCommunication::IPCErrorCode ret = Process->IPC->Write(Handle->ID, TmpBuffer, 0x1000);
delete[] TmpBuffer; delete[] TmpBuffer, TmpBuffer = nullptr;
debug("Write returned %d", ret); debug("Write returned %d", ret);
if (ret == InterProcessCommunication::IPCErrorCode::IPCNotListening) if (ret == InterProcessCommunication::IPCErrorCode::IPCNotListening)
{ {
@ -57,7 +57,7 @@ namespace Execute
void ELFInterpreterThreadWrapper() void ELFInterpreterThreadWrapper()
{ {
ELFInterpreterIPCThread(InterpreterTargetProcess, (char *)InterpreterTargetPath->c_str(), InterpreterMemoryImage, InterpreterNeededLibraries); ELFInterpreterIPCThread(InterpreterTargetProcess, (char *)InterpreterTargetPath->c_str(), InterpreterMemoryImage, InterpreterNeededLibraries);
delete InterpreterTargetPath; delete InterpreterTargetPath, InterpreterTargetPath = nullptr;
return; return;
} }
@ -206,7 +206,7 @@ namespace Execute
Thread->Memory->Add(p.Address, p.PageCount); Thread->Memory->Add(p.Address, p.PageCount);
bl.TmpMem->DetachAddress(p.Address); bl.TmpMem->DetachAddress(p.Address);
} }
delete bl.TmpMem; delete bl.TmpMem, bl.TmpMem = nullptr;
bl.sd.Process = Process; bl.sd.Process = Process;
bl.sd.Thread = Thread; bl.sd.Thread = Thread;

View File

@ -62,7 +62,7 @@ namespace Execute
SymbolValue = ELFGetSymbolValue(((Elf64_Ehdr *)BaseImage), Section->sh_link, ELF64_R_SYM(RelTable->r_info)); SymbolValue = ELFGetSymbolValue(((Elf64_Ehdr *)BaseImage), Section->sh_link, ELF64_R_SYM(RelTable->r_info));
if (SymbolValue == 0xdead) if (SymbolValue == 0xdead)
{ {
delete ELFBase.TmpMem; delete ELFBase.TmpMem, ELFBase.TmpMem = nullptr;
return {}; return {};
} }
} }
@ -80,7 +80,7 @@ namespace Execute
default: default:
{ {
error("Unsupported relocation type: %d", ELF64_R_TYPE(RelTable->r_info)); error("Unsupported relocation type: %d", ELF64_R_TYPE(RelTable->r_info));
delete ELFBase.TmpMem; delete ELFBase.TmpMem, ELFBase.TmpMem = nullptr;
return {}; return {};
} }
} }

View File

@ -94,7 +94,7 @@ namespace VirtualFileSystem
FinalPath.Get()[Size - 1] = '\0'; FinalPath.Get()[Size - 1] = '\0';
// Deallocate the Path array // Deallocate the Path array
delete[] Path; delete[] Path, Path = nullptr;
vfsdbg("GetPathFromNode()->\"%s\"", FinalPath.Get()); vfsdbg("GetPathFromNode()->\"%s\"", FinalPath.Get());
return FinalPath; return FinalPath;
@ -246,7 +246,7 @@ namespace VirtualFileSystem
{ {
if (strcmp(Parent->Children[i]->Name, Name) == 0) if (strcmp(Parent->Children[i]->Name, Name) == 0)
{ {
delete Parent->Children[i]; delete Parent->Children[i], Parent->Children[i] = nullptr;
Parent->Children.remove(i); Parent->Children.remove(i);
vfsdbg("RemoveChild()->OK"); vfsdbg("RemoveChild()->OK");
return FileStatus::OK; return FileStatus::OK;

View File

@ -636,11 +636,11 @@ namespace GraphicalUserInterface
GUI::~GUI() GUI::~GUI()
{ {
delete this->mem; delete this->mem, this->mem = nullptr;
delete this->BackBuffer; delete this->BackBuffer, this->BackBuffer = nullptr;
delete this->DesktopBuffer; delete this->DesktopBuffer, this->DesktopBuffer = nullptr;
delete this->OverlayBuffer; delete this->OverlayBuffer, this->OverlayBuffer = nullptr;
delete this->CursorBuffer; delete this->CursorBuffer, this->CursorBuffer = nullptr;
Display->DeleteBuffer(200); Display->DeleteBuffer(200);
for (size_t i = 0; i < this->Windows.size(); i++) for (size_t i = 0; i < this->Windows.size(); i++)
this->Windows.remove(i); this->Windows.remove(i);

View File

@ -57,7 +57,8 @@ namespace GraphicalUserInterface
LastHeight = ((Window *)this->ParentWindow)->GetPosition().Height; LastHeight = ((Window *)this->ParentWindow)->GetPosition().Height;
this->mem->FreePages(this->Buffer->Data, TO_PAGES(this->Buffer->Size)); this->mem->FreePages(this->Buffer->Data, TO_PAGES(this->Buffer->Size));
delete this->Buffer; this->Buffer->Data = nullptr;
delete this->Buffer, this->Buffer = nullptr;
this->Buffer = new ScreenBitmap; this->Buffer = new ScreenBitmap;
this->Buffer->Width = LastWidth; this->Buffer->Width = LastWidth;

View File

@ -117,8 +117,8 @@ namespace GraphicalUserInterface
WidgetCollection::~WidgetCollection() WidgetCollection::~WidgetCollection()
{ {
delete this->mem; delete this->mem, this->mem = nullptr;
delete this->Buffer; delete this->Buffer, this->Buffer = nullptr;
delete this->CurrentFont; delete this->CurrentFont, this->CurrentFont = nullptr;
} }
} }

View File

@ -60,6 +60,6 @@ namespace GraphicalUserInterface
Window::~Window() Window::~Window()
{ {
delete this->mem; delete this->mem, this->mem = nullptr;
} }
} }

View File

@ -15,7 +15,8 @@ namespace GraphicalUserInterface
{ {
// TODO: Optimize this // TODO: Optimize this
this->mem->FreePages(this->Buffer->Data, TO_PAGES(this->Buffer->Size)); this->mem->FreePages(this->Buffer->Data, TO_PAGES(this->Buffer->Size));
delete this->Buffer; this->Buffer->Data = nullptr;
delete this->Buffer, this->Buffer = nullptr;
this->Buffer = new ScreenBitmap; this->Buffer = new ScreenBitmap;
this->Buffer->Width = e->Resize.Width; this->Buffer->Width = e->Resize.Width;

View File

@ -27,7 +27,7 @@ namespace NetworkARP
{ {
DiscoveredAddress *tmp = DiscoveredAddresses[i]; DiscoveredAddress *tmp = DiscoveredAddresses[i];
netdbg("Removed %s from discovered addresses", IP.v4.ToStringLittleEndian()); netdbg("Removed %s from discovered addresses", IP.v4.ToStringLittleEndian());
delete tmp; delete tmp, tmp = nullptr;
DiscoveredAddresses.remove(i); DiscoveredAddresses.remove(i);
} }
} }
@ -125,7 +125,7 @@ namespace NetworkARP
InternetProtocol().v4.FromHex(Header->TargetIP).ToStringLittleEndian()); InternetProtocol().v4.FromHex(Header->TargetIP).ToStringLittleEndian());
/* Send the request to the broadcast MAC address. */ /* Send the request to the broadcast MAC address. */
Ethernet->Send({.Address = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}, NetworkEthernet::FrameType::TYPE_ARP, (uint8_t *)Header, sizeof(ARPHeader)); Ethernet->Send({.Address = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}, NetworkEthernet::FrameType::TYPE_ARP, (uint8_t *)Header, sizeof(ARPHeader));
delete Header; delete Header, Header = nullptr;
} }
int RequestTimeout = 20; int RequestTimeout = 20;
@ -160,7 +160,7 @@ namespace NetworkARP
Header->TargetMAC = b48(ResolvedMAC); Header->TargetMAC = b48(ResolvedMAC);
Header->TargetIP = b32(IP.v4.ToHex()); Header->TargetIP = b32(IP.v4.ToHex());
Ethernet->Send(MediaAccessControl().FromHex(ResolvedMAC), NetworkEthernet::FrameType::TYPE_ARP, (uint8_t *)Header, sizeof(ARPHeader)); Ethernet->Send(MediaAccessControl().FromHex(ResolvedMAC), NetworkEthernet::FrameType::TYPE_ARP, (uint8_t *)Header, sizeof(ARPHeader));
delete Header; delete Header, Header = nullptr;
} }
bool ARP::OnEthernetPacketReceived(uint8_t *Data, uint64_t Length) bool ARP::OnEthernetPacketReceived(uint8_t *Data, uint64_t Length)

View File

@ -46,7 +46,7 @@ namespace NetworkInterfaceManager
RegisteredEvents.remove(i); RegisteredEvents.remove(i);
// Delete all interfaces and their callbacks and free the memory // Delete all interfaces and their callbacks and free the memory
delete mem; delete mem, mem = nullptr;
} }
void NetworkInterface::FetchNetworkCards(unsigned long DriverUID) void NetworkInterface::FetchNetworkCards(unsigned long DriverUID)

View File

@ -304,6 +304,6 @@ namespace Recovery
KernelRecovery::~KernelRecovery() KernelRecovery::~KernelRecovery()
{ {
debug("Destructor called"); debug("Destructor called");
delete gui; delete gui, gui = nullptr;
} }
} }

View File

@ -236,7 +236,7 @@ namespace InterProcessCommunication
IPC::~IPC() IPC::~IPC()
{ {
delete mem; delete mem, mem = nullptr;
vfs->Delete(IPCNode, true); vfs->Delete(IPCNode, true);
} }
} }

View File

@ -88,10 +88,10 @@ namespace Tasking
trace("Thread \"%s\"(%d) removed from process \"%s\"(%d)", trace("Thread \"%s\"(%d) removed from process \"%s\"(%d)",
Thread->Name, Thread->ID, Thread->Parent->Name, Thread->Parent->ID); Thread->Name, Thread->ID, Thread->Parent->Name, Thread->Parent->ID);
// Free memory // Free memory
delete Thread->Stack; delete Thread->Stack, Thread->Stack = nullptr;
delete Thread->Memory; delete Thread->Memory, Thread->Memory = nullptr;
SecurityManager.DestroyToken(Thread->Security.UniqueToken); SecurityManager.DestroyToken(Thread->Security.UniqueToken);
delete Thread->Parent->Threads[i]; delete Thread->Parent->Threads[i], Thread->Parent->Threads[i] = nullptr;
// Remove from the list // Remove from the list
Thread->Parent->Threads.remove(i); Thread->Parent->Threads.remove(i);
break; break;
@ -117,8 +117,8 @@ namespace Tasking
{ {
trace("Process \"%s\"(%d) removed from the list", Process->Name, Process->ID); trace("Process \"%s\"(%d) removed from the list", Process->Name, Process->ID);
// Free memory // Free memory
delete ListProcess[i]->IPC; delete ListProcess[i]->IPC, ListProcess[i]->IPC = nullptr;
delete ListProcess[i]->ELFSymbolTable; delete ListProcess[i]->ELFSymbolTable, ListProcess[i]->ELFSymbolTable = nullptr;
SecurityManager.DestroyToken(ListProcess[i]->Security.UniqueToken); SecurityManager.DestroyToken(ListProcess[i]->Security.UniqueToken);
if (ListProcess[i]->Security.TrustLevel == TaskTrustLevel::User) if (ListProcess[i]->Security.TrustLevel == TaskTrustLevel::User)
KernelAllocator.FreePages((void *)ListProcess[i]->PageTable, TO_PAGES(PAGE_SIZE)); KernelAllocator.FreePages((void *)ListProcess[i]->PageTable, TO_PAGES(PAGE_SIZE));
@ -138,7 +138,7 @@ namespace Tasking
vfs->Delete(ListProcess[i]->ProcessDirectory, true); vfs->Delete(ListProcess[i]->ProcessDirectory, true);
// Free memory // Free memory
delete ListProcess[i]; delete ListProcess[i], ListProcess[i] = nullptr;
// Remove from the list // Remove from the list
ListProcess.remove(i); ListProcess.remove(i);
break; break;
@ -304,9 +304,9 @@ namespace Tasking
} }
} }
delete Process->IPC; delete Process->IPC, Process->IPC = nullptr;
delete Process->ELFSymbolTable; delete Process->ELFSymbolTable, Process->ELFSymbolTable = nullptr;
delete Process; delete Process, Process = nullptr;
ListProcess.remove(i); ListProcess.remove(i);
NextPID--; NextPID--;
break; break;
@ -325,10 +325,10 @@ namespace Tasking
} }
} }
delete Thread->Stack; delete Thread->Stack, Thread->Stack = nullptr;
delete Thread->Memory; delete Thread->Memory, Thread->Memory = nullptr;
SecurityManager.DestroyToken(Thread->Security.UniqueToken); SecurityManager.DestroyToken(Thread->Security.UniqueToken);
delete Thread; delete Thread, Thread = nullptr;
NextTID--; NextTID--;
} }

View File

@ -39,9 +39,9 @@ public:
{ {
for (int i = 0; i < HashMapCapacity; i++) for (int i = 0; i < HashMapCapacity; i++)
if (Nodes[i] != nullptr) if (Nodes[i] != nullptr)
delete Nodes[i]; delete Nodes[i], Nodes[i] = nullptr;
delete[] Nodes; delete[] Nodes, Nodes = nullptr;
delete DummyNode; delete DummyNode, DummyNode = nullptr;
} }
int HashCode(K Key) { return Key % HashMapCapacity; } int HashCode(K Key) { return Key % HashMapCapacity; }

View File

@ -41,7 +41,7 @@ public:
~smart_ptr() ~smart_ptr()
{ {
spdbg("Smart pointer deleted (%#lx)", m_RealPointer); spdbg("Smart pointer deleted (%#lx)", m_RealPointer);
delete (m_RealPointer); delete m_RealPointer, m_RealPointer = nullptr;
} }
T &operator*() T &operator*()
@ -151,8 +151,8 @@ public:
if (m_ReferenceCounter->Get() == 0) if (m_ReferenceCounter->Get() == 0)
{ {
spdbg("[%#lx] Shared pointer deleted (ptr=%#lx, ref=%#lx)", this, m_RealPointer, m_ReferenceCounter); spdbg("[%#lx] Shared pointer deleted (ptr=%#lx, ref=%#lx)", this, m_RealPointer, m_ReferenceCounter);
delete m_ReferenceCounter; delete m_ReferenceCounter, m_ReferenceCounter = nullptr;
delete m_RealPointer; delete m_RealPointer, m_RealPointer = nullptr;
} }
} }
@ -188,8 +188,8 @@ public:
(*m_ReferenceCounter)--; (*m_ReferenceCounter)--;
if (m_ReferenceCounter->Get() == 0) if (m_ReferenceCounter->Get() == 0)
{ {
delete m_ReferenceCounter;
delete m_RealPointer; delete m_RealPointer;
delete m_ReferenceCounter;
} }
m_RealPointer = Pointer; m_RealPointer = Pointer;
m_ReferenceCounter = new Counter(); m_ReferenceCounter = new Counter();
@ -202,15 +202,13 @@ public:
spdbg("[%#lx] Shared pointer reset (ptr=%#lx, ref=%#lx)", this, m_RealPointer, m_ReferenceCounter); spdbg("[%#lx] Shared pointer reset (ptr=%#lx, ref=%#lx)", this, m_RealPointer, m_ReferenceCounter);
if (m_ReferenceCounter->Get() == 1) if (m_ReferenceCounter->Get() == 1)
{ {
delete m_RealPointer; delete m_RealPointer, m_RealPointer = nullptr;
delete m_ReferenceCounter; delete m_ReferenceCounter, m_ReferenceCounter = nullptr;
} }
else else
{ {
(*m_ReferenceCounter)--; (*m_ReferenceCounter)--;
} }
m_RealPointer = nullptr;
m_ReferenceCounter = nullptr;
} }
void swap(shared_ptr<T> &Other) void swap(shared_ptr<T> &Other)

View File

@ -40,7 +40,7 @@ public:
~String() ~String()
{ {
strdbg("String deleted: \"%s\" (data: %#lx, length: %d, capacity: %d)", this->m_Data, this->m_Data, this->m_Length, this->m_Capacity); strdbg("String deleted: \"%s\" (data: %#lx, length: %d, capacity: %d)", this->m_Data, this->m_Data, this->m_Length, this->m_Capacity);
delete[] this->m_Data; delete[] this->m_Data, this->m_Data = nullptr;
} }
int length() const int length() const

View File

@ -71,8 +71,7 @@ public:
VectorCapacity = 0; VectorCapacity = 0;
if (VectorBuffer != nullptr) if (VectorBuffer != nullptr)
{ {
delete[] VectorBuffer; delete[] VectorBuffer, VectorBuffer = nullptr;
VectorBuffer = nullptr;
} }
} }
@ -230,8 +229,7 @@ public:
VectorSize = 0; VectorSize = 0;
if (VectorBuffer != nullptr) if (VectorBuffer != nullptr)
{ {
delete[] VectorBuffer; delete[] VectorBuffer, VectorBuffer = nullptr;
VectorBuffer = nullptr;
} }
} }