From ebb0f761d219e6889b48a77b4a1eb2574846d707 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 19 Sep 2019 22:02:02 +0200 Subject: [PATCH] - GOOSE subscriber example: added error handling when ethernet cannot be accessed --- examples/goose_publisher/goose_publisher_example.c | 2 +- examples/goose_subscriber/goose_subscriber_example.c | 11 ++++++++--- src/goose/goose_receiver.c | 4 +++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/examples/goose_publisher/goose_publisher_example.c b/examples/goose_publisher/goose_publisher_example.c index 52c13c6b..015a3b74 100644 --- a/examples/goose_publisher/goose_publisher_example.c +++ b/examples/goose_publisher/goose_publisher_example.c @@ -69,7 +69,7 @@ main(int argc, char** argv) GoosePublisher_destroy(publisher); } else { - printf("Failed to create GOOSE publisher. Reason can be that the Ethernet interface doesn't exist or you need root permissions.\n"); + printf("Failed to create GOOSE publisher. Reason can be that the Ethernet interface doesn't exist or root permission are required.\n"); } LinkedList_destroyDeep(dataSetValues, (LinkedListValueDeleteFunction) MmsValue_delete); diff --git a/examples/goose_subscriber/goose_subscriber_example.c b/examples/goose_subscriber/goose_subscriber_example.c index 511a9cf8..2b16ca75 100644 --- a/examples/goose_subscriber/goose_subscriber_example.c +++ b/examples/goose_subscriber/goose_subscriber_example.c @@ -66,10 +66,15 @@ main(int argc, char** argv) GooseReceiver_start(receiver); - signal(SIGINT, sigint_handler); + if (GooseReceiver_isRunning(receiver)) { + signal(SIGINT, sigint_handler); - while (running) { - Thread_sleep(100); + while (running) { + Thread_sleep(100); + } + } + else { + printf("Failed to start GOOSE subscriber. Reason can be that the Ethernet interface doesn't exist or root permission are required.\n"); } GooseReceiver_stop(receiver); diff --git a/src/goose/goose_receiver.c b/src/goose/goose_receiver.c index 25050438..a5139339 100644 --- a/src/goose/goose_receiver.c +++ b/src/goose/goose_receiver.c @@ -844,7 +844,9 @@ GooseReceiver_stop(GooseReceiver self) self->stop = true; self->running = false; - Thread_destroy(self->thread); + if (self->thread) + Thread_destroy(self->thread); + self->stop = false; #endif }