[*] AuAsync shutdown is still a mess
This commit is contained in:
parent
7865749348
commit
7dda7ae358
@ -243,11 +243,6 @@ namespace Aurora::Async
|
|||||||
gThread->Run();
|
gThread->Run();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StopSched()
|
|
||||||
{
|
|
||||||
DeinitSched();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Schedule(AuUInt64 ns, IThreadPoolInternal *pool,
|
bool Schedule(AuUInt64 ns, IThreadPoolInternal *pool,
|
||||||
WorkerId_t target,
|
WorkerId_t target,
|
||||||
AuSPtr<IAsyncRunnable> runnable)
|
AuSPtr<IAsyncRunnable> runnable)
|
||||||
|
@ -14,7 +14,6 @@ namespace Aurora::Async
|
|||||||
void InitSched();
|
void InitSched();
|
||||||
void DeinitSched();
|
void DeinitSched();
|
||||||
void StartSched();
|
void StartSched();
|
||||||
void StopSched();
|
|
||||||
|
|
||||||
bool Schedule(AuUInt64 ns, IThreadPoolInternal *pool, WorkerId_t target, AuSPtr<IAsyncRunnable> runnable);
|
bool Schedule(AuUInt64 ns, IThreadPoolInternal *pool, WorkerId_t target, AuSPtr<IAsyncRunnable> runnable);
|
||||||
void TerminateSceduledTasks(IThreadPoolInternal *pool, WorkerId_t target);
|
void TerminateSceduledTasks(IThreadPoolInternal *pool, WorkerId_t target);
|
||||||
|
@ -614,19 +614,11 @@ namespace Aurora::Async
|
|||||||
auto pLocalRunner = this->GetThreadStateNoWarn();
|
auto pLocalRunner = this->GetThreadStateNoWarn();
|
||||||
|
|
||||||
AuList<WorkerId_t> toBarrier;
|
AuList<WorkerId_t> toBarrier;
|
||||||
// Noting
|
|
||||||
// 1) that StopSched may lockup under a writable lock
|
|
||||||
// -> we will terminate a thread that may be dispatching a sys pump event
|
|
||||||
// 2) that barrier doesn't need to be under a write lock
|
|
||||||
//
|
|
||||||
// Perform the following shutdown of the schedular and other available threads under a read lock
|
|
||||||
{
|
|
||||||
|
|
||||||
|
{
|
||||||
{
|
{
|
||||||
AU_LOCK_GUARD(this->rwlock_->AsReadable());
|
AU_LOCK_GUARD(this->rwlock_->AsReadable());
|
||||||
|
|
||||||
StopSched();
|
|
||||||
|
|
||||||
for (auto &[groupId, group] : this->threads_)
|
for (auto &[groupId, group] : this->threads_)
|
||||||
{
|
{
|
||||||
for (auto &[id, worker] : group->workers)
|
for (auto &[id, worker] : group->workers)
|
||||||
@ -642,10 +634,6 @@ namespace Aurora::Async
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Ehhhh
|
|
||||||
// We need this fix to a specific V8 deinit lockup
|
|
||||||
//this->Poll();
|
|
||||||
|
|
||||||
for (const auto &id : toBarrier)
|
for (const auto &id : toBarrier)
|
||||||
{
|
{
|
||||||
if (trySelfPid == id)
|
if (trySelfPid == id)
|
||||||
@ -1307,23 +1295,6 @@ namespace Aurora::Async
|
|||||||
|
|
||||||
jobWorker->isDeadEvent->Set();
|
jobWorker->isDeadEvent->Set();
|
||||||
|
|
||||||
if (!this->GetThreadState()->bIsKiller)
|
|
||||||
{
|
|
||||||
AU_LOCK_GUARD(this->rwlock_->AsReadable());
|
|
||||||
#if 0
|
|
||||||
// TODO... i know what to do
|
|
||||||
#else
|
|
||||||
//// this will do for now
|
|
||||||
//if (!jobWorker->rejecting &&
|
|
||||||
// !this->shutdown)
|
|
||||||
//{
|
|
||||||
// this->Barrier(AuAsync::GetCurrentWorkerPId(), 0, false , true);
|
|
||||||
//}
|
|
||||||
////this->Barrier(AuAsync::GetCurrentWorkerPId(), 0, false, false);
|
|
||||||
// UPDATE: 2023
|
|
||||||
// TODO: regressed - it wont do
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
jobWorker->bAlreadyDoingExitTick = false;
|
jobWorker->bAlreadyDoingExitTick = false;
|
||||||
jobWorker->bBreakEarly = true;
|
jobWorker->bBreakEarly = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user