Oops, StringImpl's "the empty string" global was not always initialized.

These "oops forgot to initialize" bugs are getting annoying...
This commit is contained in:
Andreas Kling 2018-10-22 13:10:08 +02:00
parent c5e55f4737
commit 702d308e67
Notes: sideshowbarker 2024-07-19 18:45:23 +09:00
3 changed files with 14 additions and 7 deletions

View file

@ -4,12 +4,17 @@
namespace AK {
static StringImpl* s_theEmptyStringImpl = nullptr;
void StringImpl::initializeGlobals()
{
s_theEmptyStringImpl = new StringImpl(ConstructTheEmptyStringImpl);;
}
StringImpl& StringImpl::theEmptyStringImpl()
{
static StringImpl* s = nullptr;
if (!s)
s = new StringImpl(ConstructTheEmptyStringImpl);
return *s;
ASSERT(s_theEmptyStringImpl);
return *s_theEmptyStringImpl;
}
StringImpl::~StringImpl()

View file

@ -15,6 +15,7 @@ public:
RetainPtr<StringImpl> toUppercase() const;
static StringImpl& theEmptyStringImpl();
static void initializeGlobals();
~StringImpl();

View file

@ -27,7 +27,7 @@
#include "Console.h"
#define TEST_VFS
//#define TEST_ELF_LOADER
#define TEST_ELF_LOADER
//#define TEST_CRASHY_USER_PROCESSES
static void motd_main() NORETURN;
@ -102,8 +102,6 @@ static void init_stage2()
// Anything that registers interrupts goes *after* PIC and IDT for obvious reasons.
Syscall::initialize();
VirtualFileSystem::initializeGlobals();
extern void panel_main();
new Task(panel_main, "panel", IPC::Handle::PanelTask, Task::Ring0);
@ -203,6 +201,9 @@ void init()
MemoryManager::initialize();
VirtualFileSystem::initializeGlobals();
StringImpl::initializeGlobals();
auto keyboard = make<Keyboard>();
PIT::initialize();