Emulate sync D-Bus method call with async implementation underneath to avoid poll race condition

This commit is contained in:
sangelovic committed 2020-01-12 23:10:19 +01:00
1 parent cb118f95b7
commit 4688e81534
14 files changed
+760 -592

No files matched your search

+15 -5
View File
@@ -56,12 +56,9 @@ protected:
virtual void onDoOperationReply(uint32_t returnValue, const sdbus::Error* error) = 0;
public:
int32_t doSignalEmission()
void emitTwoSimpleSignals()
{
int32_t result;
object_.callMethod("doSignalEmission").onInterface(INTERFACE_NAME).storeResultsTo(result);
//object_.callMethodAsync("doSignalEmission").onInterface(INTERFACE_NAME).uponReplyInvoke([this](const sdbus::Error* error, int32_t returnValue){ printf("Async reply handler\n"); });
return result;
object_.callMethod("emitTwoSimpleSignals").onInterface(INTERFACE_NAME);
}
void noArgNoReturn()
@@ -180,6 +177,19 @@ public:
});
}
void doOperationClientSideAsyncWith500msTimeout(uint32_t param)
{
using namespace std::chrono_literals;
object_.callMethodAsync("doOperation")
.onInterface(INTERFACE_NAME)
.withTimeout(500000us)
.withArguments(param)
.uponReplyInvoke([this](const sdbus::Error* error, uint32_t returnValue)
{
this->onDoOperationReply(returnValue, error);
});
}
sdbus::Signature getSignature()
{
sdbus::Signature result;