summaryrefslogtreecommitdiff
path: root/server-tools/instance-manager/angel.cc
diff options
context:
space:
mode:
authorunknown <anozdrin/alik@alik.opbmk>2007-02-22 22:56:43 +0300
committerunknown <anozdrin/alik@alik.opbmk>2007-02-22 22:56:43 +0300
commitd12ba31c558314d10257edc3e55ea4e1fdbd50c4 (patch)
tree9abd83ce27d0133887976b57555f9b8f7b966753 /server-tools/instance-manager/angel.cc
parent3645bbe7c3c09b6d57a4ba5f0ca674d425359149 (diff)
downloadmariadb-git-d12ba31c558314d10257edc3e55ea4e1fdbd50c4.tar.gz
Merge fix.
Diffstat (limited to 'server-tools/instance-manager/angel.cc')
-rw-r--r--server-tools/instance-manager/angel.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/server-tools/instance-manager/angel.cc b/server-tools/instance-manager/angel.cc
index 4de0b1fe2b9..888122253ed 100644
--- a/server-tools/instance-manager/angel.cc
+++ b/server-tools/instance-manager/angel.cc
@@ -43,6 +43,7 @@ enum { CHILD_OK= 0, CHILD_NEED_RESPAWN, CHILD_EXIT_ANGEL };
static int log_fd;
static volatile sig_atomic_t child_status= CHILD_OK;
+static volatile sig_atomic_t child_exit_code= 0;
static volatile sig_atomic_t shutdown_request_signo= 0;
@@ -171,7 +172,7 @@ static bool create_pid_file()
/**
SIGCHLD handler.
- Reap child, analyze child exit status, and set child_status
+ Reap child, analyze child exit code, and set child_status
appropriately.
*************************************************************************/
@@ -179,13 +180,12 @@ void reap_child(int __attribute__((unused)) signo)
{
/* NOTE: As we have only one child, no need to cycle waitpid(). */
- int child_exit_status;
+ int exit_code;
- if (waitpid(0, &child_exit_status, WNOHANG) > 0)
+ if (waitpid(0, &exit_code, WNOHANG) > 0)
{
- child_status= WIFSIGNALED(child_exit_status) ?
- CHILD_NEED_RESPAWN :
- CHILD_EXIT_ANGEL;
+ child_exit_code= exit_code;
+ child_status= exit_code ? CHILD_NEED_RESPAWN : CHILD_EXIT_ANGEL;
}
}
@@ -312,7 +312,8 @@ static int angel_main_loop()
{
child_status= CHILD_OK;
- log_error("Angel: Manager exited abnormally.");
+ log_error("Angel: Manager exited abnormally (exit code: %d).",
+ (int) child_exit_code);
log_info("Angel: sleeping 1 second...");