From d1eccb9011984987b3aafa40c85b8d4ed2ffe0c7 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Tue, 21 Jun 2022 19:13:22 +0200 Subject: [PATCH] iox-#751 Fix rpc c example and add user trigger in signal handler Signed-off-by: Christian Eltzschig --- .../request_response_in_c/client_c_waitset.c | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/iceoryx_examples/request_response_in_c/client_c_waitset.c b/iceoryx_examples/request_response_in_c/client_c_waitset.c index 9095d3ec3ec..e93a8adab6d 100644 --- a/iceoryx_examples/request_response_in_c/client_c_waitset.c +++ b/iceoryx_examples/request_response_in_c/client_c_waitset.c @@ -18,6 +18,7 @@ #include "iceoryx_binding_c/request_header.h" #include "iceoryx_binding_c/response_header.h" #include "iceoryx_binding_c/runtime.h" +#include "iceoryx_binding_c/user_trigger.h" #include "iceoryx_binding_c/wait_set.h" #include "request_and_response_c_types.h" #include "sleep_for.h" @@ -32,10 +33,14 @@ bool keepRunning = true; const char APP_NAME[] = "iox-c-request-response-client-waitset"; +iox_user_trigger_storage_t terminationTriggerStorage; +iox_user_trigger_t terminationTrigger; + void sigHandler(int signalValue) { (void)signalValue; keepRunning = false; + iox_user_trigger_trigger(terminationTrigger); } int main() @@ -62,6 +67,13 @@ int main() printf("failed to attach client\n"); _exit(-1); } + + terminationTrigger = iox_user_trigger_init(&terminationTriggerStorage); + if (iox_ws_attach_user_trigger_event(waitset, terminationTrigger, 0, NULL) != WaitSetResult_SUCCESS) + { + printf("failed to attach termination trigger\n"); + _exit(-1); + } //! [create waitset and attach client] while (keepRunning) @@ -129,11 +141,18 @@ int main() iox_client_release_response(client, response); } } + else if (iox_notification_info_does_originate_from_user_trigger(notificationArray[i], terminationTrigger)) + { + break; + } } //! [process responses] - const uint32_t SLEEP_TIME_IN_MS = 950U; - sleep_for(SLEEP_TIME_IN_MS); + if (keepRunning) + { + const uint32_t SLEEP_TIME_IN_MS = 950U; + sleep_for(SLEEP_TIME_IN_MS); + } } //! [cleanup]