[+] Added Linux signal configuration and separate LinuxConfig type (LinuxConfig)
[*] Fix Linux regressions in previous NT commit
This commit is contained in:
parent
ac0981ac1b
commit
3503d0ec68
@ -389,6 +389,14 @@ namespace Aurora
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct LinuxConfig
|
||||||
|
{
|
||||||
|
bool bFIODisableBatching { false };
|
||||||
|
bool bIOLinuxHasProcIpcPerms { false };
|
||||||
|
AuUInt8 uSignalTerminate { 27 };
|
||||||
|
AuUInt8 uSignalGAIOWorkerThreadDone { 28 };
|
||||||
|
};
|
||||||
|
|
||||||
struct RuntimeStartInfo
|
struct RuntimeStartInfo
|
||||||
{
|
{
|
||||||
ConsoleConfig console;
|
ConsoleConfig console;
|
||||||
@ -398,9 +406,8 @@ namespace Aurora
|
|||||||
AuAlignTo<32, FIOConfig> fio;
|
AuAlignTo<32, FIOConfig> fio;
|
||||||
AuAlignTo<64, DebugConfig> debug;
|
AuAlignTo<64, DebugConfig> debug;
|
||||||
AuAlignTo<32, ThreadingConfig> threadingConfig;
|
AuAlignTo<32, ThreadingConfig> threadingConfig;
|
||||||
|
AuAlignTo<32, LinuxConfig> linuxConfig;
|
||||||
AuAlignTo<32, DummyConfig> padding;
|
AuAlignTo<32, DummyConfig> padding;
|
||||||
bool bFIODisableBatching { true };
|
|
||||||
bool bIOLinuxHasProcIpcPerms { false };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,10 +51,6 @@ namespace Aurora::IO
|
|||||||
struct UnixIOHandle final : AFileHandle
|
struct UnixIOHandle final : AFileHandle
|
||||||
{
|
{
|
||||||
bool InitFromPath(HandleCreate create) override;
|
bool InitFromPath(HandleCreate create) override;
|
||||||
|
|
||||||
bool IsFile() override;
|
|
||||||
bool IsTTY() override;
|
|
||||||
bool IsPipe() override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool UnixIOHandle::InitFromPath(HandleCreate create)
|
bool UnixIOHandle::InitFromPath(HandleCreate create)
|
||||||
@ -176,7 +172,7 @@ namespace Aurora::IO
|
|||||||
|
|
||||||
AUKN_SYM bool IsHandleTTY(AuUInt uHandle)
|
AUKN_SYM bool IsHandleTTY(AuUInt uHandle)
|
||||||
{
|
{
|
||||||
if ((AuInt)uHandle < 0)
|
if ((AuSInt)uHandle < 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -188,7 +184,7 @@ namespace Aurora::IO
|
|||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if ((AuInt)uHandle < 0)
|
if ((AuSInt)uHandle < 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -206,7 +202,7 @@ namespace Aurora::IO
|
|||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if ((AuInt)uHandle < 0)
|
if ((AuSInt)uHandle < 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gRuntimeConfig.bFIODisableBatching)
|
if (gRuntimeConfig.linuxConfig.bFIODisableBatching)
|
||||||
{
|
{
|
||||||
UNIX::SendIOBuffers();
|
UNIX::SendIOBuffers();
|
||||||
}
|
}
|
||||||
@ -329,7 +329,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gRuntimeConfig.bFIODisableBatching)
|
if (gRuntimeConfig.linuxConfig.bFIODisableBatching)
|
||||||
{
|
{
|
||||||
UNIX::SendIOBuffers();
|
UNIX::SendIOBuffers();
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
namespace Aurora::IO::Net
|
namespace Aurora::IO::Net
|
||||||
{
|
{
|
||||||
static const auto kMagicSignal = SIGRTMIN + 10 - 6 + 9;
|
|
||||||
static AuList<AuWPtr<NetResolver>> tlsResolvers;
|
static AuList<AuWPtr<NetResolver>> tlsResolvers;
|
||||||
|
|
||||||
struct ThreadLocalCaughtCompletion : Loop::LSSignalCatcher
|
struct ThreadLocalCaughtCompletion : Loop::LSSignalCatcher
|
||||||
@ -35,8 +34,15 @@ namespace Aurora::IO::Net
|
|||||||
NetResolver *pParent_;
|
NetResolver *pParent_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// this is beyond dumb and inefficient. i think glibc just creates a singular worker thread and resolves each request in a blocking manner with no mutliplexing
|
||||||
|
// TODO: we really need to make a general purpose AuAsync IO pool and generic resolver replacer/hooking interface for net services.
|
||||||
|
static auto GetGAIAsyncIOSignal()
|
||||||
|
{
|
||||||
|
return SIGUSR1 + gRuntimeConfig.linuxConfig.uSignalGAIOWorkerThreadDone;
|
||||||
|
}
|
||||||
|
|
||||||
ThreadLocalCaughtCompletion::ThreadLocalCaughtCompletion(NetResolver *pParent) :
|
ThreadLocalCaughtCompletion::ThreadLocalCaughtCompletion(NetResolver *pParent) :
|
||||||
LSSignalCatcher({kMagicSignal}),
|
LSSignalCatcher({GetGAIAsyncIOSignal()}),
|
||||||
pParent_(pParent)
|
pParent_(pParent)
|
||||||
{
|
{
|
||||||
handles_ = {this->handle, AuStaticCast<AuLoop::LSEvent>(this->pParent_->pEvent)->GetHandle()};
|
handles_ = {this->handle, AuStaticCast<AuLoop::LSEvent>(this->pParent_->pEvent)->GetHandle()};
|
||||||
@ -132,7 +138,7 @@ namespace Aurora::IO::Net
|
|||||||
|
|
||||||
sigevent event {0};
|
sigevent event {0};
|
||||||
event.sigev_notify = SIGEV_SIGNAL;
|
event.sigev_notify = SIGEV_SIGNAL;
|
||||||
event.sigev_signo = kMagicSignal;
|
event.sigev_signo = GetGAIAsyncIOSignal();
|
||||||
//event._sigev_un._tid = gettid();
|
//event._sigev_un._tid = gettid();
|
||||||
|
|
||||||
auto pQueue = AuMakeShared<ThreadLocalCaughtCompletion>(this);
|
auto pQueue = AuMakeShared<ThreadLocalCaughtCompletion>(this);
|
||||||
@ -353,6 +359,6 @@ namespace Aurora::IO::Net
|
|||||||
};
|
};
|
||||||
|
|
||||||
::sigemptyset(&action.sa_mask);
|
::sigemptyset(&action.sa_mask);
|
||||||
::sigaction(kMagicSignal, &action, nullptr);
|
::sigaction(GetGAIAsyncIOSignal(), &action, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -82,7 +82,7 @@ namespace Aurora::IO::Net
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gRuntimeConfig.bFIODisableBatching)
|
if (gRuntimeConfig.linuxConfig.bFIODisableBatching)
|
||||||
{
|
{
|
||||||
UNIX::SendIOBuffers();
|
UNIX::SendIOBuffers();
|
||||||
}
|
}
|
||||||
@ -150,7 +150,7 @@ namespace Aurora::IO::Net
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gRuntimeConfig.bFIODisableBatching)
|
if (gRuntimeConfig.linuxConfig.bFIODisableBatching)
|
||||||
{
|
{
|
||||||
UNIX::SendIOBuffers();
|
UNIX::SendIOBuffers();
|
||||||
}
|
}
|
||||||
|
@ -459,7 +459,7 @@ namespace Aurora::IO::UNIX
|
|||||||
if ((platform.uKernelMajor > 5) ||
|
if ((platform.uKernelMajor > 5) ||
|
||||||
((platform.uKernelMajor == 5) && (platform.uKernelMinor >= 6)))
|
((platform.uKernelMajor == 5) && (platform.uKernelMinor >= 6)))
|
||||||
{
|
{
|
||||||
gHasProcSyscall = gRuntimeConfig.bIOLinuxHasProcIpcPerms;
|
gHasProcSyscall = gRuntimeConfig.linuxConfig.bIOLinuxHasProcIpcPerms;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,6 @@ namespace Aurora::Threading::Threads
|
|||||||
static ThreadInfo gDummyThreadInfo;
|
static ThreadInfo gDummyThreadInfo;
|
||||||
|
|
||||||
#if defined(AURORA_IS_POSIX_DERIVED)
|
#if defined(AURORA_IS_POSIX_DERIVED)
|
||||||
static const auto kSignalAbort = SIGUSR1 + 69;
|
|
||||||
|
|
||||||
static void HandleSigAbortThread(int a)
|
static void HandleSigAbortThread(int a)
|
||||||
{
|
{
|
||||||
@ -566,7 +565,7 @@ namespace Aurora::Threading::Threads
|
|||||||
Exit(true);
|
Exit(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AttachSignalKiller();
|
|
||||||
this->bSupportsAltKill = true;
|
this->bSupportsAltKill = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -747,11 +746,11 @@ namespace Aurora::Threading::Threads
|
|||||||
#if defined(AURORA_IS_POSIX_DERIVED)
|
#if defined(AURORA_IS_POSIX_DERIVED)
|
||||||
struct sigaction action =
|
struct sigaction action =
|
||||||
{
|
{
|
||||||
.sa_handler = HandleSigAbortThread
|
.sa_handler = HandleSigAbortThread,
|
||||||
|
.sa_flags = 0
|
||||||
};
|
};
|
||||||
::sigemptyset(&action.sa_mask);
|
::sigemptyset(&action.sa_mask);
|
||||||
::sigaction(kSignalAbort, &action, nullptr);
|
::sigaction(SIGRTMIN + gRuntimeConfig.linuxConfig.uSignalTerminate, &action, nullptr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -796,11 +795,6 @@ namespace Aurora::Threading::Threads
|
|||||||
SetAffinity(this->mask_);
|
SetAffinity(this->mask_);
|
||||||
AffinityPrioThrottleTickAmendECores();
|
AffinityPrioThrottleTickAmendECores();
|
||||||
UpdateName();
|
UpdateName();
|
||||||
|
|
||||||
if (!this->bNotOwned)
|
|
||||||
{
|
|
||||||
AttachSignalKiller();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static AuHashMap<EThreadPriority, int> kNiceMap
|
static AuHashMap<EThreadPriority, int> kNiceMap
|
||||||
@ -1282,12 +1276,13 @@ namespace Aurora::Threading::Threads
|
|||||||
void OSThread::OSDeatach()
|
void OSThread::OSDeatach()
|
||||||
{
|
{
|
||||||
#if defined(AURORA_IS_POSIX_DERIVED)
|
#if defined(AURORA_IS_POSIX_DERIVED)
|
||||||
struct sigaction action =
|
this->bSupportsAltKill = false;
|
||||||
{
|
//struct sigaction action =
|
||||||
.sa_handler = SIG_DFL
|
//{
|
||||||
};
|
// .sa_handler = SIG_DFL
|
||||||
::sigemptyset(&action.sa_mask);
|
//};
|
||||||
::sigaction(kSignalAbort, &action, nullptr);
|
//::sigemptyset(&action.sa_mask);
|
||||||
|
//::sigaction(SIGRTMIN + gRuntimeConfig.linuxConfig.uSignalTerminate, &action, nullptr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1417,7 +1412,7 @@ namespace Aurora::Threading::Threads
|
|||||||
|
|
||||||
if (this->bSupportsAltKill)
|
if (this->bSupportsAltKill)
|
||||||
{
|
{
|
||||||
::pthread_kill(this->handle_, kSignalAbort);
|
::pthread_kill(this->handle_, SIGRTMIN + gRuntimeConfig.linuxConfig.uSignalTerminate);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1464,6 +1459,8 @@ namespace Aurora::Threading::Threads
|
|||||||
AuxUlibInitialize();
|
AuxUlibInitialize();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
AttachSignalKiller();
|
||||||
|
|
||||||
if (auto pThread = GetThread())
|
if (auto pThread = GetThread())
|
||||||
{
|
{
|
||||||
AuStaticCast<OSThread>(pThread)->MakeMain();
|
AuStaticCast<OSThread>(pThread)->MakeMain();
|
||||||
|
Loading…
Reference in New Issue
Block a user