From 5ef6e0cd23e09a37871eb0a6743428f42fa431c0 Mon Sep 17 00:00:00 2001 From: J Reece Wilson Date: Mon, 18 Sep 2023 19:04:09 +0100 Subject: [PATCH] [*] Fix IO Processor regression, circa WorkerPId_t behaviour change. [*] Fix minor Linux SOCK_CLOEXEC issue --- Source/IO/AuIOProcessor.cpp | 35 +++++++++++++++++++++--------- Source/IO/AuIOProcessor.hpp | 2 +- Source/IO/Net/AuNetSocket.Unix.cpp | 8 +++---- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/Source/IO/AuIOProcessor.cpp b/Source/IO/AuIOProcessor.cpp index 53597d07..1501c467 100644 --- a/Source/IO/AuIOProcessor.cpp +++ b/Source/IO/AuIOProcessor.cpp @@ -19,7 +19,7 @@ namespace Aurora::IO { IOProcessor::IOProcessor(AuUInt threadId, bool bTickOnly, - AuAsync::WorkerPId_t worker, + AuOptionalEx worker, const AuSPtr &pLoopQueue, bool bIsNoQueue) : mutliplexIOAndTimer(!bTickOnly), @@ -39,7 +39,9 @@ namespace Aurora::IO bool IOProcessor::Init() { - if (!this->ToQueue()) + auto pQueue = this->ToQueue(); + + if (!pQueue) { return {}; } @@ -50,13 +52,25 @@ namespace Aurora::IO return false; } - if (!this->timers.Init(this, AuLoop::NewLSTimer(0))) + auto pTimer = AuLoop::NewLSTimer(0); + if (!pTimer) + { + SysPushErrorNested(); + return false; + } + + if (!this->timers.Init(this, pTimer)) + { + SysPushErrorNested(); + return false; + } + + if (!pQueue->SourceAdd(this->items.cvEvent)) { SysPushErrorNested(); return false; } - this->ToQueue()->SourceAdd(this->items.cvEvent); if (!this->bIsNoQueue) { auto pAS = AuMakeShared([pThat = AuSharedFromThis()](const AuSPtr &pSource) -> bool @@ -65,13 +79,13 @@ namespace Aurora::IO return false; }); - if (!this->ToQueue()->AddCallback(this->items.cvEvent, pAS)) + if (!pQueue->AddCallback(this->items.cvEvent, pAS)) { - return {}; + return false; } - } - this->ToQueue()->Commit(); + + (void)pQueue->Commit(); if (asyncWorker) { @@ -931,7 +945,7 @@ namespace Aurora::IO static AuSPtr NewIOProcessorEx(bool tickOnly, const AuSPtr &queue, bool bIsNoQueue) { - auto processor = AuMakeShared(0, tickOnly, AuAsync::WorkerPId_t {}, queue, bIsNoQueue); + auto processor = AuMakeShared(0, tickOnly, AuOptionalEx {}, queue, bIsNoQueue); if (!processor) { SysPushErrorMem(); @@ -949,7 +963,7 @@ namespace Aurora::IO AUKN_SYM AuSPtr NewIOProcessor(bool tickOnly, const AuSPtr &queue) { - auto processor = AuMakeShared(0, tickOnly, AuAsync::WorkerPId_t {}, queue, false); + auto processor = AuMakeShared(0, tickOnly, AuOptionalEx {}, queue, false); if (!processor) { SysPushErrorMem(); @@ -969,6 +983,7 @@ namespace Aurora::IO { if (!id.pool) { + SysPushErrorArg(); return {}; } diff --git a/Source/IO/AuIOProcessor.hpp b/Source/IO/AuIOProcessor.hpp index 4848033f..8b7b448d 100644 --- a/Source/IO/AuIOProcessor.hpp +++ b/Source/IO/AuIOProcessor.hpp @@ -16,7 +16,7 @@ namespace Aurora::IO struct IOProcessor : IIOProcessor, AuEnableSharedFromThis, AuAsync::IWorkItemHandler { ~IOProcessor(); - IOProcessor(AuUInt threadId, bool tickOnly, AuAsync::WorkerPId_t worker, const AuSPtr &loop, bool bIsNoQueue); + IOProcessor(AuUInt threadId, bool tickOnly, AuOptionalEx worker, const AuSPtr &loop, bool bIsNoQueue); bool Init(); diff --git a/Source/IO/Net/AuNetSocket.Unix.cpp b/Source/IO/Net/AuNetSocket.Unix.cpp index e85e9317..513895b8 100644 --- a/Source/IO/Net/AuNetSocket.Unix.cpp +++ b/Source/IO/Net/AuNetSocket.Unix.cpp @@ -88,8 +88,8 @@ namespace Aurora::IO::Net this->osHandle_ = ::socket( - IPToDomain(this->remoteEndpoint_) | SOCK_CLOEXEC, - TransportToPlatformType(this->remoteEndpoint_), + IPToDomain(this->remoteEndpoint_), + TransportToPlatformType(this->remoteEndpoint_) | SOCK_CLOEXEC, 0 ); @@ -137,8 +137,8 @@ namespace Aurora::IO::Net } this->osHandle_ = ::socket( - IPToDomain(this->remoteEndpoint_) | SOCK_CLOEXEC, - TransportToPlatformType(this->remoteEndpoint_), + IPToDomain(this->remoteEndpoint_), + TransportToPlatformType(this->remoteEndpoint_) | SOCK_CLOEXEC, 0 );