[*] Harden IO processor item usage after parent processor release
This commit is contained in:
parent
9527a076cf
commit
073d77a17b
@ -35,6 +35,7 @@ namespace Aurora::IO
|
||||
IOProcessor::~IOProcessor()
|
||||
{
|
||||
this->ReleaseAllWatches();
|
||||
this->items.Deinit();
|
||||
}
|
||||
|
||||
bool IOProcessor::Init()
|
||||
|
@ -14,6 +14,11 @@ namespace Aurora::IO
|
||||
{
|
||||
bool IOProcessorItem::StopWatch()
|
||||
{
|
||||
if (!this->pParent)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this->pParent->CheckThread() &&
|
||||
this->pParent->bFrameStart)
|
||||
{
|
||||
@ -26,6 +31,11 @@ namespace Aurora::IO
|
||||
|
||||
bool IOProcessorItem::FailWatch()
|
||||
{
|
||||
if (!this->pParent)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this->pParent->CheckThread() &&
|
||||
this->pParent->bFrameStart)
|
||||
{
|
||||
@ -36,9 +46,13 @@ namespace Aurora::IO
|
||||
return this->pParent->items.ScheduleFinish(AuSharedFromThis(), true);
|
||||
}
|
||||
|
||||
|
||||
bool IOProcessorItem::OnFinished(const AuSPtr<AuLoop::ILoopSource>& source, AuUInt8 pos)
|
||||
{
|
||||
if (!this->pParent)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (this->bSingleshot)
|
||||
{
|
||||
if (AuExchange(this->bTriggered, true))
|
||||
@ -65,6 +79,11 @@ namespace Aurora::IO
|
||||
|
||||
void IOProcessorItem::IOAlert(bool force)
|
||||
{
|
||||
if (!this->pParent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this->pParent->IsTickOnly())
|
||||
{
|
||||
bool bForceTick {};
|
||||
|
@ -13,7 +13,7 @@ namespace Aurora::IO
|
||||
|
||||
struct IOProcessorItem : AuLoop::ILoopSourceSubscriberEx, IIOProcessorItem, AuEnableSharedFromThis<IOProcessorItem>
|
||||
{
|
||||
IOProcessor *pParent;
|
||||
IOProcessor *pParent {};
|
||||
bool bSingleshot {};
|
||||
bool bTriggered {};
|
||||
|
||||
|
@ -20,6 +20,16 @@ namespace Aurora::IO
|
||||
return bool(this->cvEvent);
|
||||
}
|
||||
|
||||
void IOProcessorItems::Deinit()
|
||||
{
|
||||
AU_LOCK_GUARD(this->mutex);
|
||||
|
||||
for (const auto &pItem : this->allItems)
|
||||
{
|
||||
pItem->pParent = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool IOProcessorItems::AddFrameTemp(const AuSPtr<IOProcessorItem> &item)
|
||||
{
|
||||
AU_TRY_LOCK_GUARD_RET_DEF(this->mutex);
|
||||
|
@ -31,6 +31,7 @@ namespace Aurora::IO
|
||||
AuList<AuPair<AuSPtr<IOProcessorItem>, bool>> crossThreadAbort;
|
||||
|
||||
bool Init();
|
||||
void Deinit();
|
||||
|
||||
bool AddFrameTemp(const AuSPtr<IOProcessorItem> &item);
|
||||
bool AddFrameOrFallback(const AuSPtr<IOProcessorItem> &item);
|
||||
|
Loading…
Reference in New Issue
Block a user