Exit dumpstate on SIGPIPE to avoid cascading child crashes

When dumpstate ignores SIGPIPE it can lead to a cascade of tombstones /
coredumps since many of its children don't handle or ignore it.  It's
best to just exit dumpstate once the pipe is broken.

Change-Id: Ic0c57ecf4171f0c0a07837e51c41cb1876e1350c
This commit is contained in:
John Michelau 2013-05-06 16:42:02 -05:00
parent e8fed71da2
commit 885f888c55

View File

@ -314,7 +314,13 @@ static void usage() {
); );
} }
static void sigpipe_handler(int n) {
(void)n;
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
struct sigaction sigact;
int do_add_date = 0; int do_add_date = 0;
int do_compress = 0; int do_compress = 0;
int do_vibrate = 1; int do_vibrate = 1;
@ -334,7 +340,9 @@ int main(int argc, char *argv[]) {
} }
ALOGI("begin\n"); ALOGI("begin\n");
signal(SIGPIPE, SIG_IGN); memset(&sigact, 0, sizeof(sigact));
sigact.sa_handler = sigpipe_handler;
sigaction(SIGPIPE, &sigact, NULL);
/* set as high priority, and protect from OOM killer */ /* set as high priority, and protect from OOM killer */
setpriority(PRIO_PROCESS, 0, -20); setpriority(PRIO_PROCESS, 0, -20);