From c551e30350cd09ce83450c4f51ebe9c85df514e9 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Tue, 31 Jul 2018 13:28:24 -0700 Subject: [PATCH] [posix] handle signals SIGHUP or SIGTERM and exit (#2930) This commit adds signal handler in posix example platform for signals SIGHUP and SIGTERM. Upon receiving either signal the process is terminated using `exit(0)`. --- examples/platforms/posix/platform-posix.h | 1 + examples/platforms/posix/platform.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/examples/platforms/posix/platform-posix.h b/examples/platforms/posix/platform-posix.h index de7684e7c..b27a9042c 100644 --- a/examples/platforms/posix/platform-posix.h +++ b/examples/platforms/posix/platform-posix.h @@ -70,6 +70,7 @@ __forceinline void timersub(struct timeval *a, struct timeval *b, struct timeval #include #include #include +#include #include #include #include diff --git a/examples/platforms/posix/platform.c b/examples/platforms/posix/platform.c index c75caee67..1295e3b2c 100644 --- a/examples/platforms/posix/platform.c +++ b/examples/platforms/posix/platform.c @@ -57,9 +57,17 @@ uint32_t WELLKNOWN_NODE_ID = 34; extern bool gPlatformPseudoResetWasRequested; +static volatile bool gTerminate = false; + #ifndef _WIN32 int gArgumentsCount = 0; char **gArguments = NULL; + +static void handleSignal(int aSignal) +{ + (void)aSignal; + gTerminate = true; +} #endif void PlatformInit(int aArgCount, char *aArgVector[]) @@ -85,6 +93,9 @@ void PlatformInit(int aArgCount, char *aArgVector[]) gArgumentsCount = aArgCount; gArguments = aArgVector; + + signal(SIGTERM, &handleSignal); + signal(SIGHUP, &handleSignal); #endif NODE_ID = (uint32_t)strtol(aArgVector[1], &endptr, 0); @@ -149,6 +160,11 @@ void PlatformProcessDrivers(otInstance *aInstance) } } + if (gTerminate) + { + exit(0); + } + platformUartProcess(); platformRadioProcess(aInstance); platformAlarmProcess(aInstance);