Merge "ShellSubscriber: install SIGPIPE handler" into rvc-dev am: 9d411d7d8e
Change-Id: Ibd8b5dff1f23cf482a41ed943f6a93de2eee77dc
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user