Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21cddf76 authored by Ruchir Rastogi's avatar Ruchir Rastogi Committed by Automerger Merge Worker
Browse files

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

Change-Id: Ia7d97aa4d707918835f018d15e7398b571aeb1e2
parents 014675e8 acdb4a7a
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -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();