static MUtils::Internal::CriticalSection g_terminal_lock;
//Is terminal attached?
-static volatile bool g_terminal_attached = false;
+static QAtomicInt g_terminal_attached;
//Terminal output buffer
static const size_t BUFF_SIZE = 8192;
{
MUtils::Internal::CSLocker lock(g_terminal_lock);
- if (g_terminal_attached)
+ if (g_terminal_attached.fetchAndStoreOrdered(0) > 0)
{
g_fileBuf_stdout.reset();
g_fileBuf_stderr.reset();
if(stderr) freopen_s(&temp[1], "NUL", "wb", stderr);
FreeConsole();
set_hicon(&g_terminal_icon, NULL);
- g_terminal_attached = false;
}
}
if(enableConsole)
{
- if(!g_terminal_attached)
+ if(!g_terminal_attached.fetchAndStoreOrdered(1))
{
if(AllocConsole() != FALSE)
{
_snprintf_s(title, 128, _TRUNCATE, "%s | Debug Console", appName);
SetConsoleTitleA(title);
}
- g_terminal_attached = true;
+ }
+ else
+ {
+ g_terminal_attached.fetchAndStoreOrdered(0); /*failed*/
}
}
- if(g_terminal_attached)
+ if(MUTILS_BOOLIFY(g_terminal_attached))
{
g_fileBuf_stdout.reset(terminal_connect(stdout, std::cout));
g_fileBuf_stderr.reset(terminal_connect(stderr, std::cerr));
{
MUtils::Internal::CSLocker lock(g_terminal_lock);
- if(g_terminal_attached)
+ if(MUTILS_BOOLIFY(g_terminal_attached))
{
write_to_terminal(type, message);
}
{
MUtils::Internal::CSLocker lock(g_terminal_lock);
- if(g_terminal_attached && (!(icon.isNull() || MUtils::OS::running_on_wine())))
+ if(MUTILS_BOOLIFY(g_terminal_attached) && (!(icon.isNull() || MUtils::OS::running_on_wine())))
{
if(const HICON hIcon = (HICON) MUtils::Win32Utils::qicon_to_hicon(&icon, 16, 16))
{