X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=libtest%2Fcmdline.cc;h=741d18d7f7e480d9e3cf9e44c9cec60246d01807;hb=9763b8e9b681d1d6713b95e4d7ce6ffeafeafca5;hp=c8b63eece89de8356b487daf5ecc281d2f01677e;hpb=48e6e1b70b3b79f79334bdea8bfbbb76d377be07;p=awesomized%2Flibmemcached diff --git a/libtest/cmdline.cc b/libtest/cmdline.cc index c8b63eec..741d18d7 100644 --- a/libtest/cmdline.cc +++ b/libtest/cmdline.cc @@ -138,7 +138,7 @@ Application::Application(const std::string& arg, const bool _use_libtool_arg) : { if (libtool() == NULL) { - fatal_message("libtool requested, but know libtool was found"); + FATAL("libtool requested, but know libtool was found"); } } @@ -366,15 +366,15 @@ bool Application::slurp() case EFAULT: case ENOMEM: - fatal_message(strerror(error)); + FATAL(strerror(error)); break; case EINVAL: - fatal_message("RLIMIT_NOFILE exceeded, or if OSX the timeout value was invalid"); + FATAL("RLIMIT_NOFILE exceeded, or if OSX the timeout value was invalid"); break; default: - fatal_message(strerror(error)); + FATAL(strerror(error)); break; } @@ -409,8 +409,10 @@ bool Application::slurp() Application::error_t Application::join() { pid_t waited_pid= waitpid(_pid, &_status, 0); + slurp(); if (waited_pid == _pid and WIFEXITED(_status) == false) { + /* What we are looking for here is how the exit status happened. - 127 means that posix_spawn() itself had an error. @@ -423,7 +425,12 @@ Application::error_t Application::join() std::string error_string("posix_spawn() failed pid:"); error_string+= _pid; error_string+= " name:"; - error_string+= built_argv[0]; + error_string+= print_argv(built_argv); + if (stderr_result_length()) + { + error_string+= " stderr: "; + error_string+= stderr_c_str(); + } throw std::logic_error(error_string); } else if (WIFSIGNALED(_status)) @@ -431,9 +438,20 @@ Application::error_t Application::join() if (WTERMSIG(_status) != SIGTERM and WTERMSIG(_status) != SIGHUP) { _app_exit_state= Application::INVALID_POSIX_SPAWN; - std::string error_string(built_argv[0]); + std::string error_string(print_argv(built_argv)); error_string+= " was killed by signal "; error_string+= strsignal(WTERMSIG(_status)); + if (stdout_result_length()) + { + error_string+= " stdout: "; + error_string+= stdout_c_str(); + } + if (stderr_result_length()) + { + error_string+= " stderr: "; + error_string+= stderr_c_str(); + } + throw std::runtime_error(error_string); } @@ -589,18 +607,17 @@ void Application::Pipe::reset() if (pipe(_pipe_fd) == -1) #endif { - fatal_message(strerror(errno)); + FATAL(strerror(errno)); } _open[0]= true; _open[1]= true; #if defined(HAVE_PIPE2) && HAVE_PIPE2 - return; -#endif { nonblock(); cloexec(); } +#endif } void Application::Pipe::cloexec() @@ -656,14 +673,12 @@ void Application::Pipe::dup_for_spawn(posix_spawn_file_actions_t& file_actions) int ret; if ((ret= posix_spawn_file_actions_adddup2(&file_actions, _pipe_fd[type], _std_fd )) < 0) { - Error << "posix_spawn_file_actions_adddup2(" << strerror(ret) << ")"; - fatal_message(strerror(ret)); + FATAL("posix_spawn_file_actions_adddup2(%s)", strerror(ret)); } if ((ret= posix_spawn_file_actions_addclose(&file_actions, _pipe_fd[type])) < 0) { - Error << "posix_spawn_file_actions_adddup2(" << strerror(ret) << ")"; - fatal_message(strerror(ret)); + FATAL("posix_spawn_file_actions_addclose(%s)", strerror(ret)); } }