From f9493096f9c10a4f6431bbb0b14ffa79b05c14b1 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Wed, 24 Oct 2007 13:58:13 +0200 Subject: [PATCH] Let afs die if para_server dies. --- afs.c | 9 ++++++++- error.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/afs.c b/afs.c index d889ec77..3d0d2d77 100644 --- a/afs.c +++ b/afs.c @@ -709,6 +709,9 @@ static void signal_pre_select(struct sched *s, struct task *t) static void signal_post_select(struct sched *s, struct task *t) { struct signal_task *st = t->private_data; + t->ret = -E_AFS_PARENT_DIED; + if (getppid() == 1) + goto err; t->ret = 1; if (!FD_ISSET(st->fd, &s->rfds)) return; @@ -719,10 +722,14 @@ static void signal_post_select(struct sched *s, struct task *t) if (st->signum == SIGHUP) { close_afs_tables(); t->ret = open_afs_tables(); + /* FIXME: Restore current mood or playlist */ + if (t->ret < 0) + goto err; return; } - PARA_NOTICE_LOG("caught signal %d\n", st->signum); t->ret = -E_AFS_SIGNAL; +err: + PARA_NOTICE_LOG("%s\n", PARA_STRERROR(-t->ret)); unregister_tasks(); } diff --git a/error.h b/error.h index 56b26d78..3e4911bf 100644 --- a/error.h +++ b/error.h @@ -84,6 +84,7 @@ extern const char **para_errlist[]; PARA_ERROR(INPUT_TOO_LARGE, "input too large for stdin command"), \ PARA_ERROR(AFS_SYNTAX, "afs syntax error"), \ PARA_ERROR(AFS_SIGNAL, "afs caught deadly signal"), \ + PARA_ERROR(AFS_PARENT_DIED, "fatal: server process terminated"), \ #define MOOD_ERRORS \ -- 2.39.5