Merge "ShellSubscriber: install SIGPIPE handler" into rvc-dev am: 9d411d7d8e am: 492edf7bf8 am: 3e7c04ed80 am: dd072320b4

Change-Id: I0c4b21fb14b90507a1ba3e5ccb3960f4700d49ba
This commit is contained in:
Ruchir Rastogi
2020-04-16 18:34:43 +00:00
committed by Automerger Merge Worker

View File

@@ -38,20 +38,27 @@ using std::make_shared;
shared_ptr<StatsService> gStatsService = nullptr;
void sigHandler(int sig) {
if (gStatsService != nullptr) {
gStatsService->Terminate();
void signalHandler(int sig) {
if (sig == SIGPIPE) {
// ShellSubscriber uses SIGPIPE as a signal to detect the end of the
// client process. Don't prematurely exit(1) here. Instead, ignore the
// signal and allow the write call to return EPIPE.
ALOGI("statsd received SIGPIPE. Ignoring signal.");
return;
}
if (gStatsService != nullptr) gStatsService->Terminate();
ALOGW("statsd terminated on receiving signal %d.", sig);
exit(1);
}
void registerSigHandler()
void registerSignalHandlers()
{
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sa.sa_handler = sigHandler;
sa.sa_handler = signalHandler;
sigaction(SIGPIPE, &sa, nullptr);
sigaction(SIGHUP, &sa, nullptr);
sigaction(SIGINT, &sa, nullptr);
sigaction(SIGQUIT, &sa, nullptr);
@@ -79,7 +86,7 @@ int main(int /*argc*/, char** /*argv*/) {
return -1;
}
registerSigHandler();
registerSignalHandlers();
gStatsService->sayHiToStatsCompanion();