Skip to content

Commit

Permalink
Make instance pointers volatile
Browse files Browse the repository at this point in the history
  • Loading branch information
djphoenix committed May 23, 2019
1 parent d1bb756 commit 2c0f2f4
Show file tree
Hide file tree
Showing 8 changed files with 17 additions and 17 deletions.
6 changes: 3 additions & 3 deletions src/kernlib/display.cpp
Expand Up @@ -170,7 +170,7 @@ const size_t ConsoleDisplay::size = ConsoleDisplay::top - ConsoleDisplay::base;
static Display *getSerialDisplay();

static SerialDisplay serialConsole;
Display *Display::instance = getSerialDisplay();
volatile Display *Display::instance = getSerialDisplay();
Mutex Display::instanceMutex;

static Display *getSerialDisplay() { return &serialConsole; }
Expand Down Expand Up @@ -209,10 +209,10 @@ void Display::setup() {
}

Display *Display::getInstance() {
if (instance) return instance;
if (instance) return const_cast<Display*>(instance);
Mutex::CriticalLock lock(instanceMutex);
if (!instance) setup();
return instance;
return const_cast<Display*>(instance);
}

Display::~Display() {}
2 changes: 1 addition & 1 deletion src/kernlib/include/kernlib/display.hpp
Expand Up @@ -8,7 +8,7 @@
class Display {
private:
static Mutex instanceMutex;
static Display *instance;
static volatile Display *instance;
static void setup();
protected:
Mutex mutex;
Expand Down
8 changes: 4 additions & 4 deletions src/platform/acpi.cpp
Expand Up @@ -8,13 +8,13 @@
#include "pagetable.hpp"

Mutex ACPI::controllerMutex;
ACPI* ACPI::controller = nullptr;
volatile ACPI* ACPI::controller = nullptr;

ACPI* ACPI::getController() {
if (controller) return controller;
if (controller) return const_cast<ACPI*>(controller);
Mutex::CriticalLock lock(controllerMutex);
if (!controller) controller = new ACPI();
return controller;
return const_cast<ACPI*>(controller);
}

ACPI::ACPI() {
Expand All @@ -29,7 +29,7 @@ ACPI::ACPI() {
ioApicAddr = nullptr;

const uint64_t *ptr = nullptr;
if (!ptr && (ptr = static_cast<const uint64_t*>(EFI::getACPI2Addr()))) {
if (nullptr != (ptr = static_cast<const uint64_t*>(EFI::getACPI2Addr()))) {
Pagetable::map(ptr);
Pagetable::map(ptr + 1);
if ((*ptr != ACPI_SIG_RTP_DSR) || !ParseRsdp(ptr)) ptr = nullptr;
Expand Down
2 changes: 1 addition & 1 deletion src/platform/include/acpi.hpp
Expand Up @@ -105,7 +105,7 @@ class ACPI {

private:
static Mutex controllerMutex;
static ACPI *controller;
static volatile ACPI *controller;

char *localApicAddr, *ioApicAddr;
uint8_t ioApicMaxCount;
Expand Down
2 changes: 1 addition & 1 deletion src/process/include/modules.hpp
Expand Up @@ -12,7 +12,7 @@ class ModuleManager {
char *name, *version, *description, *requirements, *developer;
};
static Mutex managerMutex;
static ModuleManager* manager;
static volatile ModuleManager* manager;
void parseInternal();
void parseInitRD();
void loadStream(Stream *stream);
Expand Down
2 changes: 1 addition & 1 deletion src/process/include/processmanager.hpp
Expand Up @@ -16,7 +16,7 @@ class ProcessManager {
};

static Mutex managerMutex;
static ProcessManager* manager;
static volatile ProcessManager* manager;

ProcessManager();
QueuedThread *nextThread, *lastThread;
Expand Down
6 changes: 3 additions & 3 deletions src/process/modules.cpp
Expand Up @@ -6,6 +6,7 @@
#include "readelf.hpp"
#include "multiboot_info.hpp"

volatile ModuleManager* ModuleManager::manager = nullptr;
Mutex ModuleManager::managerMutex;

bool ModuleManager::parseModuleInfo(ModuleInfo *info, Process *process) {
Expand Down Expand Up @@ -122,7 +123,6 @@ bool ModuleManager::bindRequirements(const char *reqs, Process *process) {
return 1;
}

ModuleManager* ModuleManager::manager = nullptr;
void ModuleManager::loadStream(Stream *stream) {
Stream *sub = stream;
Process *process;
Expand Down Expand Up @@ -190,8 +190,8 @@ void ModuleManager::init() {
}

ModuleManager* ModuleManager::getManager() {
if (manager) return manager;
if (manager) return const_cast<ModuleManager*>(manager);
Mutex::Lock lock(managerMutex);
if (!manager) manager = new ModuleManager();
return manager;
return const_cast<ModuleManager*>(manager);
}
6 changes: 3 additions & 3 deletions src/process/processmanager.cpp
Expand Up @@ -13,13 +13,13 @@ void __attribute((naked)) ProcessManager::process_loop() {
}

Mutex ProcessManager::managerMutex;
ProcessManager* ProcessManager::manager = nullptr;
volatile ProcessManager* ProcessManager::manager = nullptr;

ProcessManager* ProcessManager::getManager() {
if (manager) return manager;
if (manager) return const_cast<ProcessManager*>(manager);
Mutex::CriticalLock lock(managerMutex);
if (!manager) manager = new ProcessManager();
return manager;
return const_cast<ProcessManager*>(manager);
}

ProcessManager::ProcessManager() {
Expand Down

0 comments on commit 2c0f2f4

Please sign in to comment.