[posix-app] add platform log to record when program exits (#3989)

This commit is contained in:
Zhanglong Xia
2019-07-22 18:51:07 -07:00
committed by Jonathan Hui
parent be64623b36
commit 5d2e8e1e57
9 changed files with 202 additions and 159 deletions
+10 -15
View File
@@ -193,8 +193,7 @@ void HdlcInterface::Read(void)
}
else if ((rval < 0) && (errno != EAGAIN) && (errno != EINTR))
{
perror("HdlcInterface::Read()");
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_ERROR_ERRNO);
}
}
@@ -240,8 +239,7 @@ otError HdlcInterface::Write(const uint8_t *aFrame, uint16_t aLength)
if ((rval < 0) && (errno != EAGAIN) && (errno != EWOULDBLOCK) && (errno != EINTR))
{
perror("HdlcInterface::Write()");
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_ERROR_ERRNO);
}
SuccessOrExit(error = WaitForWritable());
@@ -279,19 +277,16 @@ otError HdlcInterface::WaitForWritable(void)
}
else if (FD_ISSET(mSockFd, &errorFds))
{
fprintf(stderr, "HdlcInterface::WaitForWritable(): socket error\n\r");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("socket error", OT_EXIT_FAILURE);
}
else
{
fprintf(stderr, "HdlcInterface::WaitForWritable(): select error\n\r");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("select error", OT_EXIT_FAILURE);
}
}
else if ((rval < 0) && (errno != EINTR))
{
perror("HdlcInterface::WaitForWritable()");
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_ERROR_ERRNO);
}
now = otSysGetTime();
@@ -357,7 +352,7 @@ int HdlcInterface::OpenFile(const char *aFile, const char *aConfig)
default:
// not supported
assert(false);
exit(OT_EXIT_INVALID_ARGUMENTS);
DieNow(OT_EXIT_INVALID_ARGUMENTS);
break;
}
@@ -371,7 +366,7 @@ int HdlcInterface::OpenFile(const char *aFile, const char *aConfig)
break;
default:
assert(false);
exit(OT_EXIT_INVALID_ARGUMENTS);
DieNow(OT_EXIT_INVALID_ARGUMENTS);
break;
}
@@ -459,7 +454,7 @@ int HdlcInterface::OpenFile(const char *aFile, const char *aConfig)
#endif
default:
assert(false);
exit(OT_EXIT_INVALID_ARGUMENTS);
DieNow(OT_EXIT_INVALID_ARGUMENTS);
break;
}
@@ -471,7 +466,7 @@ int HdlcInterface::OpenFile(const char *aFile, const char *aConfig)
exit:
if (rval != 0)
{
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_FAILURE);
}
return fd;
@@ -514,7 +509,7 @@ int HdlcInterface::ForkPty(const char *aCommand, const char *aArguments)
}
exit:
VerifyOrDie(rval == 0, OT_EXIT_FAILURE);
VerifyOrDie(rval == 0, OT_EXIT_ERROR_ERRNO);
return fd;
}
#endif // OPENTHREAD_CONFIG_POSIX_APP_ENABLE_PTY_DEVICE
+40 -33
View File
@@ -95,38 +95,6 @@ otPlatMcuPowerState otPlatGetMcuPowerState(otInstance *aInstance)
return gPlatMcuPowerState;
}
void SuccessOrDie(otError aError)
{
int exitCode;
switch (aError)
{
case OT_ERROR_NONE:
return;
case OT_ERROR_INVALID_ARGS:
exitCode = OT_EXIT_INVALID_ARGUMENTS;
break;
default:
exitCode = OT_EXIT_FAILURE;
break;
}
otLogCritPlat("Error: %s", otThreadErrorToString(aError));
// For better user experience.
fprintf(stderr, "Error: %s\r\n", otThreadErrorToString(aError));
exit(exitCode);
}
void VerifyOrDie(bool aCondition, int aExitCode)
{
if (!aCondition)
{
exit(aExitCode);
}
}
int SocketWithCloseExec(int aDomain, int aType, int aProtocol)
{
int rval = 0;
@@ -144,9 +112,48 @@ int SocketWithCloseExec(int aDomain, int aType, int aProtocol)
exit:
if (rval == -1 && fd != -1)
{
VerifyOrDie(close(fd) == 0, OT_EXIT_FAILURE);
VerifyOrDie(close(fd) == 0, OT_EXIT_ERROR_ERRNO);
fd = -1;
}
return fd;
}
const char *otExitCodeToString(uint8_t aExitCode)
{
const char *retval = NULL;
switch (aExitCode)
{
case OT_EXIT_SUCCESS:
retval = "Success";
break;
case OT_EXIT_FAILURE:
retval = "Failure";
break;
case OT_EXIT_INVALID_ARGUMENTS:
retval = "InvalidArgument";
break;
case OT_EXIT_RADIO_SPINEL_INCOMPATIBLE:
retval = "RadioSpinelIncompatible";
break;
case OT_EXIT_RADIO_SPINEL_RESET:
retval = "RadioSpinelReset";
break;
case OT_EXIT_ERROR_ERRNO:
retval = strerror(errno);
break;
default:
assert(false);
retval = "UnknownExitCode";
break;
}
return retval;
}
+7 -21
View File
@@ -102,15 +102,8 @@ static void UpdateUnicast(otInstance *aInstance, const otIp6Address &aAddress, u
error = OT_ERROR_FAILED);
exit:
if (error == OT_ERROR_NONE)
{
otLogInfoPlat("%s: %s", __func__, otThreadErrorToString(error));
}
else
{
otLogCritPlat("%s: %s", __func__, otThreadErrorToString(error));
exit(OT_EXIT_FAILURE);
}
SuccessOrDie(error);
otLogInfoPlat("%s: %s", __func__, otThreadErrorToString(error));
}
static void UpdateMulticast(otInstance *aInstance, const otIp6Address &aAddress, bool aIsAdded)
@@ -130,15 +123,8 @@ static void UpdateMulticast(otInstance *aInstance, const otIp6Address &aAddress,
error = OT_ERROR_FAILED);
exit:
if (error == OT_ERROR_NONE)
{
otLogInfoPlat("%s: %s", __func__, otThreadErrorToString(error));
}
else
{
otLogCritPlat("%s: %s", __func__, otThreadErrorToString(error));
exit(OT_EXIT_FAILURE);
}
SuccessOrDie(error);
otLogInfoPlat("%s: %s", __func__, otThreadErrorToString(error));
}
static void UpdateLink(otInstance *aInstance)
@@ -454,7 +440,7 @@ exit:
sNetlinkFd = -1;
}
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_FAILURE);
}
}
@@ -495,13 +481,13 @@ void platformNetifProcess(const fd_set *aReadFdSet, const fd_set *aWriteFdSet, c
if (FD_ISSET(sTunFd, aErrorFdSet))
{
close(sTunFd);
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_FAILURE);
}
if (FD_ISSET(sNetlinkFd, aErrorFdSet))
{
close(sNetlinkFd);
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_FAILURE);
}
if (FD_ISSET(sTunFd, aReadFdSet))
+86 -18
View File
@@ -35,12 +35,17 @@
#ifndef PLATFORM_POSIX_H_
#define PLATFORM_POSIX_H_
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/select.h>
#include <sys/time.h>
#include <openthread/error.h>
#include <openthread/instance.h>
#include "platform-config.h"
#include "common/logging.hpp"
/**
* This is the socket name used by daemon mode.
@@ -100,8 +105,89 @@ enum
* Unexpected radio spinel reset.
*/
OT_EXIT_RADIO_SPINEL_RESET = 4,
/**
* System call or library function error.
*/
OT_EXIT_ERROR_ERRNO = 5,
};
/**
* This function converts an exit code into a string.
*
* @param[in] aExitCode An exit code.
*
* @returns A string representation of an exit code.
*
*/
const char *otExitCodeToString(uint8_t aExitCode);
/**
* This macro checks for the specified condition, which is expected to commonly be true,
* and both records exit status and terminates the program if the condition is false.
*
* @param[in] aCondition The condition to verify
* @param[in] aExitCode The exit code.
*
*/
#define VerifyOrDie(aCondition, aExitCode) \
do \
{ \
if (!(aCondition)) \
{ \
fprintf(stderr, "exit(%d): %s line %d, %s\r\n", aExitCode, __func__, __LINE__, \
otExitCodeToString(aExitCode)); \
otLogCritPlat("exit(%d): %s line %d, %s", aExitCode, __func__, __LINE__, otExitCodeToString(aExitCode)); \
exit(aExitCode); \
} \
} while (false)
/**
* This macro checks for the specified error code, which is expected to commonly be successful,
* and both records exit status and terminates the program if the error code is unsuccessful.
*
* @param[in] aError An error code to be evaluated against OT_ERROR_NONE.
*
*/
#define SuccessOrDie(aError) \
do \
{ \
if (aError != OT_ERROR_NONE) \
{ \
uint8_t exitCode; \
exitCode = (aError == OT_ERROR_INVALID_ARGS) ? OT_EXIT_INVALID_ARGUMENTS : OT_EXIT_FAILURE; \
fprintf(stderr, "exit(%d): %s line %d, %s\r\n", exitCode, __func__, __LINE__, \
otThreadErrorToString(aError)); \
otLogCritPlat("exit(%d): %s line %d, %s", exitCode, __func__, __LINE__, otThreadErrorToString(aError)); \
exit(exitCode); \
} \
} while (false)
/**
* This macro unconditionally both records exit status and terminates the program.
*
* @param[in] aExitCode The exit code.
*
*/
#define DieNow(aExitCode) VerifyOrDie(false, aExitCode)
/**
* This macro unconditionally both records exit status and exit message and terminates the program.
*
* @param[in] aMessage The exit message.
* @param[in] aExitCode The exit code.
*
*/
#define DieNowWithMessage(aMessage, aExitCode) \
do \
{ \
fprintf(stderr, "exit(%d): %s line %d, %s, %s\r\n", aExitCode, __func__, __LINE__, aMessage, \
otExitCodeToString(aExitCode)); \
otLogCritPlat("exit(%d): %s line %d, %s, %s", aExitCode, __func__, __LINE__, aMessage, \
otExitCodeToString(aExitCode)); \
exit(aExitCode); \
} while (false)
/**
* Unique node ID.
*
@@ -381,24 +467,6 @@ void platformUdpProcess(otInstance *aInstance, const fd_set *aReadSet);
*/
void platformUdpUpdateFdSet(otInstance *aInstance, fd_set *aReadFdSet, int *aMaxFd);
/**
* This function ends the current process with exit code @p aExitCode if @p aCondition is false.
*
* @param[in] aCondition The condition to verify
* @param[in] aExitCode The exit code if exits.
*
*/
void VerifyOrDie(bool aCondition, int aExitCode);
/**
* This function ends the current process if @p aError is not OT_ERROR_NONE.
* The error code will be mapped from @p aError.
*
* @param[in] aError The OpenThread error code.
*
*/
void SuccessOrDie(otError aError);
/**
* This function creates a socket with SOCK_CLOEXEC flag set.
*
+7 -10
View File
@@ -231,7 +231,7 @@ otError RadioSpinel::CheckSpinelVersion(void)
{
otLogCritPlat("Spinel version mismatch - PosixApp:%d.%d, RCP:%d.%d", SPINEL_PROTOCOL_VERSION_THREAD_MAJOR,
SPINEL_PROTOCOL_VERSION_THREAD_MINOR, versionMajor, versionMinor);
exit(OT_EXIT_RADIO_SPINEL_INCOMPATIBLE);
DieNow(OT_EXIT_RADIO_SPINEL_INCOMPATIBLE);
}
exit:
@@ -273,7 +273,7 @@ otError RadioSpinel::CheckCapabilities(void)
if (!supportsRawRadio)
{
otLogCritPlat("RCP capability list does not include support for radio/raw mode");
exit(OT_EXIT_RADIO_SPINEL_INCOMPATIBLE);
DieNow(OT_EXIT_RADIO_SPINEL_INCOMPATIBLE);
}
exit:
@@ -298,7 +298,7 @@ otError RadioSpinel::CheckRadioCapabilities(void)
(mRadioCaps & OT_RADIO_CAPS_TRANSMIT_RETRIES) ? "yes" : "no",
(mRadioCaps & OT_RADIO_CAPS_CSMA_BACKOFF) ? "yes" : "no");
exit(OT_EXIT_RADIO_SPINEL_INCOMPATIBLE);
DieNow(OT_EXIT_RADIO_SPINEL_INCOMPATIBLE);
}
exit:
@@ -778,8 +778,7 @@ void RadioSpinel::Process(const fd_set &aReadFdSet, const fd_set &aWriteFdSet)
}
else if (mState == kStateTransmitting && otSysGetTime() >= mTxRadioEndUs)
{
otLogCritPlat("radio tx timeout, exit");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("radio tx timeout", OT_EXIT_FAILURE);
}
if (FD_ISSET(mHdlcInterface.GetSocket(), &aWriteFdSet))
@@ -1027,13 +1026,12 @@ otError RadioSpinel::WaitResponse(void)
}
else if (FD_ISSET(sockFd, &error_fds))
{
fprintf(stderr, "NCP error\r\n");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("NCP error", OT_EXIT_FAILURE);
}
else
{
assert(false);
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_FAILURE);
}
}
else if (rval == 0)
@@ -1044,8 +1042,7 @@ otError RadioSpinel::WaitResponse(void)
}
else if (errno != EINTR)
{
perror("wait response");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("wait response", OT_EXIT_FAILURE);
}
#endif // OPENTHREAD_POSIX_VIRTUAL_TIME
+27 -29
View File
@@ -49,16 +49,6 @@
#include "common/code_utils.hpp"
#define VerifyOrDie(aCondition) \
do \
{ \
if (!(aCondition)) \
{ \
perror(__func__); \
exit(OT_EXIT_FAILURE); \
} \
} while (false)
static const size_t kMaxFileNameSize = sizeof(OPENTHREAD_CONFIG_POSIX_SETTINGS_PATH) + 32;
static int sSettingsFd = -1;
@@ -77,8 +67,9 @@ static int swapOpen(void)
int fd;
getSettingsFileName(fileName, true);
fd = open(fileName, O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC, 0600);
VerifyOrDie(fd != -1);
VerifyOrDie(fd != -1, OT_EXIT_ERROR_ERRNO);
return fd;
}
@@ -100,11 +91,11 @@ static void swapWrite(int aFd, uint16_t aLength)
uint16_t count = aLength >= sizeof(buffer) ? sizeof(buffer) : aLength;
ssize_t rval = read(sSettingsFd, buffer, count);
VerifyOrDie(rval > 0);
VerifyOrDie(rval > 0, OT_EXIT_FAILURE);
count = static_cast<uint16_t>(rval);
rval = write(aFd, buffer, count);
assert(rval == count);
VerifyOrDie(rval == count);
VerifyOrDie(rval == count, OT_EXIT_FAILURE);
aLength -= count;
}
}
@@ -117,9 +108,9 @@ static void swapPersist(int aFd)
getSettingsFileName(swapFile, true);
getSettingsFileName(dataFile, false);
VerifyOrDie(0 == close(sSettingsFd));
VerifyOrDie(0 == rename(swapFile, dataFile));
VerifyOrDie(0 == fsync(aFd));
VerifyOrDie(0 == close(sSettingsFd), OT_EXIT_ERROR_ERRNO);
VerifyOrDie(0 == rename(swapFile, dataFile), OT_EXIT_ERROR_ERRNO);
VerifyOrDie(0 == fsync(aFd), OT_EXIT_ERROR_ERRNO);
sSettingsFd = aFd;
}
@@ -128,9 +119,9 @@ static void swapDiscard(int aFd)
{
char swapFileName[kMaxFileNameSize];
VerifyOrDie(0 == close(aFd));
VerifyOrDie(0 == close(aFd), OT_EXIT_ERROR_ERRNO);
getSettingsFileName(swapFileName, true);
VerifyOrDie(0 == unlink(swapFileName));
VerifyOrDie(0 == unlink(swapFileName), OT_EXIT_ERROR_ERRNO);
}
void otPlatSettingsInit(otInstance *aInstance)
@@ -155,7 +146,7 @@ void otPlatSettingsInit(otInstance *aInstance)
sSettingsFd = open(fileName, O_RDWR | O_CREAT | O_CLOEXEC, 0600);
}
VerifyOrDie(sSettingsFd != -1);
VerifyOrDie(sSettingsFd != -1, OT_EXIT_ERROR_ERRNO);
for (off_t size = lseek(sSettingsFd, 0, SEEK_END), offset = lseek(sSettingsFd, 0, SEEK_SET); offset < size;)
{
@@ -176,7 +167,7 @@ void otPlatSettingsInit(otInstance *aInstance)
exit:
if (error == OT_ERROR_PARSE)
{
VerifyOrDie(ftruncate(sSettingsFd, 0) == 0);
VerifyOrDie(ftruncate(sSettingsFd, 0) == 0, OT_EXIT_ERROR_ERRNO);
}
}
@@ -185,7 +176,7 @@ void otPlatSettingsDeinit(otInstance *aInstance)
OT_UNUSED_VARIABLE(aInstance);
assert(sSettingsFd != -1);
VerifyOrDie(close(sSettingsFd) == 0);
VerifyOrDie(close(sSettingsFd) == 0, OT_EXIT_ERROR_ERRNO);
}
otError otPlatSettingsGet(otInstance *aInstance, uint16_t aKey, int aIndex, uint8_t *aValue, uint16_t *aValueLength)
@@ -241,7 +232,7 @@ otError otPlatSettingsGet(otInstance *aInstance, uint16_t aKey, int aIndex, uint
}
exit:
VerifyOrDie(error != OT_ERROR_PARSE);
VerifyOrDie(error != OT_ERROR_PARSE, OT_EXIT_FAILURE);
return error;
}
@@ -260,13 +251,14 @@ otError otPlatSettingsAdd(otInstance *aInstance, uint16_t aKey, const uint8_t *a
if (size > 0)
{
VerifyOrDie(0 == lseek(sSettingsFd, 0, SEEK_SET));
VerifyOrDie(0 == lseek(sSettingsFd, 0, SEEK_SET), OT_EXIT_ERROR_ERRNO);
swapWrite(swapFd, static_cast<uint16_t>(size));
}
VerifyOrDie(write(swapFd, &aKey, sizeof(aKey)) == sizeof(aKey) &&
write(swapFd, &aValueLength, sizeof(aValueLength)) == sizeof(aValueLength) &&
write(swapFd, aValue, aValueLength) == aValueLength);
write(swapFd, &aValueLength, sizeof(aValueLength)) == sizeof(aValueLength) &&
write(swapFd, aValue, aValueLength) == aValueLength,
OT_EXIT_FAILURE);
swapPersist(swapFd);
@@ -323,17 +315,17 @@ otError otPlatSettingsDelete(otInstance *aInstance, uint16_t aKey, int aIndex)
rval = write(swapFd, &key, sizeof(key));
assert(rval == sizeof(key));
VerifyOrDie(rval == sizeof(key));
VerifyOrDie(rval == sizeof(key), OT_EXIT_FAILURE);
rval = write(swapFd, &length, sizeof(length));
assert(rval == sizeof(length));
VerifyOrDie(rval == sizeof(length));
VerifyOrDie(rval == sizeof(length), OT_EXIT_FAILURE);
swapWrite(swapFd, length);
}
exit:
VerifyOrDie(error != OT_ERROR_PARSE);
VerifyOrDie(error != OT_ERROR_PARSE, OT_EXIT_FAILURE);
if (error == OT_ERROR_NONE)
{
@@ -350,13 +342,19 @@ exit:
void otPlatSettingsWipe(otInstance *aInstance)
{
OT_UNUSED_VARIABLE(aInstance);
VerifyOrDie(0 == ftruncate(sSettingsFd, 0));
VerifyOrDie(0 == ftruncate(sSettingsFd, 0), OT_EXIT_ERROR_ERRNO);
}
#if SELF_TEST
uint64_t gNodeId = 1;
const char *otExitCodeToString(uint8_t aExitCode)
{
OT_UNUSED_VARIABLE(aExitCode);
return "SELF_TEST";
}
int main()
{
otInstance *instance = NULL;
+9 -10
View File
@@ -71,8 +71,11 @@ void otSimInit(void)
if (*endptr != '\0')
{
fprintf(stderr, "Invalid PORT_OFFSET: %s\n", offset);
exit(OT_EXIT_INVALID_ARGUMENTS);
const uint8_t kMsgSize = 40;
char msg[kMsgSize];
snprintf(msg, sizeof(msg), "Invalid PORT_OFFSET: %s", offset);
DieNowWithMessage(msg, OT_EXIT_INVALID_ARGUMENTS);
}
sPortOffset *= kWellKnownNodeId;
@@ -88,14 +91,12 @@ void otSimInit(void)
if (sSockFd == -1)
{
perror("socket");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("socket", OT_EXIT_ERROR_ERRNO);
}
if (bind(sSockFd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) == -1)
{
perror("bind");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("bind", OT_EXIT_ERROR_ERRNO);
}
}
@@ -122,8 +123,7 @@ static void otSimSendEvent(struct Event *aEvent, size_t aLength)
if (rval < 0)
{
perror("sendto");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("sendto", OT_EXIT_ERROR_ERRNO);
}
}
@@ -133,8 +133,7 @@ void otSimReceiveEvent(struct Event *aEvent)
if (rval < 0 || (uint16_t)rval < offsetof(struct Event, mData))
{
perror("recvfrom");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("recvfrom", (rval < 0) ? OT_EXIT_ERROR_ERRNO : OT_EXIT_FAILURE);
}
sNow += aEvent->mDelay;
+15 -22
View File
@@ -71,21 +71,19 @@ otError otPlatUartEnable(void)
if (sUartSocket == -1)
{
exit(OT_EXIT_FAILURE);
DieNow(OT_EXIT_FAILURE);
}
sUartLock = open(OPENTHREAD_POSIX_APP_SOCKET_LOCK, O_CREAT | O_RDONLY | O_CLOEXEC, 0600);
if (sUartLock == -1)
{
perror("open");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("open", OT_EXIT_ERROR_ERRNO);
}
if (flock(sUartLock, LOCK_EX | LOCK_NB) == -1)
{
perror("flock");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("flock", OT_EXIT_ERROR_ERRNO);
}
memset(&sockname, 0, sizeof(struct sockaddr_un));
@@ -100,8 +98,7 @@ otError otPlatUartEnable(void)
if (ret == -1)
{
perror("bind");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("bind", OT_EXIT_ERROR_ERRNO);
}
//
@@ -110,8 +107,7 @@ otError otPlatUartEnable(void)
ret = listen(sUartSocket, 1);
if (ret == -1)
{
perror("listen");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("listen", OT_EXIT_ERROR_ERRNO);
}
#endif // OPENTHREAD_ENABLE_POSIX_APP_DAEMON
@@ -219,8 +215,7 @@ void platformUartProcess(const fd_set *aReadFdSet, const fd_set *aWriteFdSet, co
#if OPENTHREAD_ENABLE_POSIX_APP_DAEMON
if (FD_ISSET(sUartSocket, aErrorFdSet))
{
perror("socket error");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("socket", OT_EXIT_FAILURE);
}
else if (FD_ISSET(sUartSocket, aReadFdSet))
{
@@ -249,14 +244,12 @@ void platformUartProcess(const fd_set *aReadFdSet, const fd_set *aWriteFdSet, co
#else // OPENTHREAD_ENABLE_POSIX_APP_DAEMON
if (FD_ISSET(STDIN_FILENO, aErrorFdSet))
{
perror("stdin");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("stdin", OT_EXIT_FAILURE);
}
if (FD_ISSET(STDOUT_FILENO, aErrorFdSet))
{
perror("stdout");
exit(OT_EXIT_FAILURE);
DieNowWithMessage("stdout", OT_EXIT_FAILURE);
}
fd = STDIN_FILENO;
@@ -274,16 +267,16 @@ void platformUartProcess(const fd_set *aReadFdSet, const fd_set *aWriteFdSet, co
}
else if (rval <= 0)
{
if (rval != 0)
{
perror("read(UART)");
}
#if OPENTHREAD_ENABLE_POSIX_APP_DAEMON
if (rval < 0)
{
perror("UART read");
}
close(sSessionSocket);
sSessionSocket = -1;
otEXIT_NOW();
#else
exit(OT_EXIT_FAILURE);
DieNowWithMessage("UART read", (rval < 0) ? OT_EXIT_ERROR_ERRNO : OT_EXIT_FAILURE);
#endif
}
}
@@ -298,13 +291,13 @@ void platformUartProcess(const fd_set *aReadFdSet, const fd_set *aWriteFdSet, co
if (rval < 0)
{
perror("UART write");
#if OPENTHREAD_ENABLE_POSIX_APP_DAEMON
perror("UART write");
close(sSessionSocket);
sSessionSocket = -1;
otEXIT_NOW();
#else
exit(OT_EXIT_FAILURE);
DieNowWithMessage("UART write", OT_EXIT_ERROR_ERRNO);
#endif
}
+1 -1
View File
@@ -388,7 +388,7 @@ void platformUdpInit(const char *aIfName)
{
if (aIfName == NULL)
{
exit(OT_EXIT_INVALID_ARGUMENTS);
DieNow(OT_EXIT_INVALID_ARGUMENTS);
}
sPlatNetifIndex = if_nametoindex(aIfName);