Merge "ShellSubscriber: install SIGPIPE handler" into rvc-dev am: 9d411d7d8e

Change-Id: Ibd8b5dff1f23cf482a41ed943f6a93de2eee77dc
This commit is contained in:
Ruchir Rastogi
2020-04-16 17:52:22 +00:00
committed by Automerger Merge Worker

View File

@@ -38,20 +38,27 @@ using std::make_shared;
shared_ptr<StatsService> gStatsService = nullptr; shared_ptr<StatsService> gStatsService = nullptr;
void sigHandler(int sig) { void signalHandler(int sig) {
if (gStatsService != nullptr) { if (sig == SIGPIPE) {
gStatsService->Terminate(); // 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); ALOGW("statsd terminated on receiving signal %d.", sig);
exit(1); exit(1);
} }
void registerSigHandler() void registerSignalHandlers()
{ {
struct sigaction sa; struct sigaction sa;
sigemptyset(&sa.sa_mask); sigemptyset(&sa.sa_mask);
sa.sa_flags = 0; sa.sa_flags = 0;
sa.sa_handler = sigHandler; sa.sa_handler = signalHandler;
sigaction(SIGPIPE, &sa, nullptr);
sigaction(SIGHUP, &sa, nullptr); sigaction(SIGHUP, &sa, nullptr);
sigaction(SIGINT, &sa, nullptr); sigaction(SIGINT, &sa, nullptr);
sigaction(SIGQUIT, &sa, nullptr); sigaction(SIGQUIT, &sa, nullptr);
@@ -79,7 +86,7 @@ int main(int /*argc*/, char** /*argv*/) {
return -1; return -1;
} }
registerSigHandler(); registerSignalHandlers();
gStatsService->sayHiToStatsCompanion(); gStatsService->sayHiToStatsCompanion();