Nursery: Initial integration
StimulusProducer: syncAwaitAllSettlements should pump caller io_context
This commit is contained in:
@@ -30,33 +30,29 @@ void assertMarionetteThread()
|
||||
} // namespace
|
||||
|
||||
void MarionetteComponent::holdInitializeCReq(
|
||||
std::function<void()> completion)
|
||||
std::function<void(std::exception_ptr &exceptionPtr)> completion)
|
||||
{
|
||||
initializeLifetimeExceptionPtr = nullptr;
|
||||
initializeCReqInvoker.emplace(initializeCReq(
|
||||
initializeLifetimeExceptionPtr,
|
||||
[completion = std::move(completion)]()
|
||||
taskNursery.launch(
|
||||
[this](sscl::co::NonViralTaskNursery::Slot::Lease &lease)
|
||||
{
|
||||
sscl::co::NonViralCompletion nvc(
|
||||
mrntt.initializeLifetimeExceptionPtr);
|
||||
nvc.checkAndRethrowException();
|
||||
completion();
|
||||
}));
|
||||
return initializeCReq(
|
||||
lease.getExceptionStorage(),
|
||||
lease.getCallerLambda());
|
||||
},
|
||||
std::move(completion));
|
||||
}
|
||||
|
||||
void MarionetteComponent::holdFinalizeCReq(
|
||||
std::function<void()> completion)
|
||||
std::function<void(std::exception_ptr &exceptionPtr)> completion)
|
||||
{
|
||||
finalizeLifetimeExceptionPtr = nullptr;
|
||||
finalizeCReqInvoker.emplace(finalizeCReq(
|
||||
finalizeLifetimeExceptionPtr,
|
||||
[completion = std::move(completion)]()
|
||||
taskNursery.launch(
|
||||
[this](sscl::co::NonViralTaskNursery::Slot::Lease &lease)
|
||||
{
|
||||
sscl::co::NonViralCompletion nvc(
|
||||
mrntt.finalizeLifetimeExceptionPtr);
|
||||
nvc.checkAndRethrowException();
|
||||
completion();
|
||||
}));
|
||||
return finalizeCReq(
|
||||
lease.getExceptionStorage(),
|
||||
lease.getCallerLambda());
|
||||
},
|
||||
std::move(completion));
|
||||
}
|
||||
|
||||
MrnttNonViralPostingInvoker MarionetteComponent::initializeCReq(
|
||||
@@ -107,7 +103,12 @@ void MarionetteComponent::exceptionInd()
|
||||
[]
|
||||
{
|
||||
mrntt.holdFinalizeCReq(
|
||||
[]() { marionetteFinalizeReqCb(true); });
|
||||
[](std::exception_ptr &exceptionPtr)
|
||||
{
|
||||
sscl::co::NonViralCompletion nvc(exceptionPtr);
|
||||
nvc.checkAndRethrowException();
|
||||
marionetteFinalizeReqCb(true);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user