diff options
author | unknown <anozdrin/alik@alik.opbmk> | 2007-02-22 22:56:43 +0300 |
---|---|---|
committer | unknown <anozdrin/alik@alik.opbmk> | 2007-02-22 22:56:43 +0300 |
commit | d65f1c92ede2dfc3be9fc777d87e210fb523ae26 (patch) | |
tree | 9abd83ce27d0133887976b57555f9b8f7b966753 /server-tools | |
parent | 1b0a3baab2be5b64a8e794bc6f4f199c966f9c95 (diff) | |
download | mariadb-git-d65f1c92ede2dfc3be9fc777d87e210fb523ae26.tar.gz |
Merge fix.
Diffstat (limited to 'server-tools')
-rw-r--r-- | server-tools/instance-manager/angel.cc | 15 | ||||
-rw-r--r-- | server-tools/instance-manager/manager.cc | 4 |
2 files changed, 11 insertions, 8 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..."); diff --git a/server-tools/instance-manager/manager.cc b/server-tools/instance-manager/manager.cc index bde685d7a28..792461e41a9 100644 --- a/server-tools/instance-manager/manager.cc +++ b/server-tools/instance-manager/manager.cc @@ -246,7 +246,8 @@ bool Manager::init_user_map(User_map *user_map) See also comments in mysqlmanager.cc to picture general Instance Manager architecture. - TODO: how about returning error status. + RETURNS + main() returns exit status (exit code). */ int Manager::main() @@ -452,6 +453,7 @@ err: /* free alarm structures */ end_thr_alarm(1); #endif + return thread_registry.get_error_status() ? 1 : 0; } |