X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fserver.cc;h=01d15625bf043e2712dccf8658899c40aafa8b53;hb=99332db60646cb1b06a61d1636eddbbf0b5d0b40;hp=135aa0f0d6cdce97ce722bb956d0af15209c8955;hpb=f47caf2833675cce0b62a6e4ffd6764c1490a8b4;p=awesomized%2Flibmemcached diff --git a/libtest/server.cc b/libtest/server.cc index 135aa0f0..01d15625 100644 --- a/libtest/server.cc +++ b/libtest/server.cc @@ -34,7 +34,7 @@ * */ -#include +#include "mem_config.h" #include #include @@ -90,6 +90,22 @@ std::ostream& operator<<(std::ostream& output, const Server &arg) return output; // for multiple << operators } +#ifdef __GLIBC__ +namespace { + +class Buffer +{ +public: + Buffer(char *b) : b_(b) {} + ~Buffer() { free(b_); } + char* buf() { return b_; } +private: + char *b_; +}; + +} +#endif // __GLIBC__ + #define MAGIC_MEMORY 123570 Server::Server(const std::string& host_arg, const in_port_t port_arg, @@ -106,6 +122,7 @@ Server::Server(const std::string& host_arg, const in_port_t port_arg, Server::~Server() { + kill(); } bool Server::check() @@ -193,6 +210,7 @@ bool Server::start() _app.use_valgrind(); } + out_of_ban_killed(false); if (args(_app) == false) { throw libtest::disconnected(LIBYATL_DEFAULT_PARAM, @@ -200,6 +218,7 @@ bool Server::start() } libtest::release_port(_port); + Application::error_t ret; if (Application::SUCCESS != (ret= _app.run())) { @@ -230,8 +249,13 @@ bool Server::start() continue; } +#ifdef __GLIBC__ + Buffer buf( get_current_dir_name()); + char *getcwd_buf= buf.buf(); +#else char buf[PATH_MAX]; char *getcwd_buf= getcwd(buf, sizeof(buf)); +#endif // __GLIBC__ throw libtest::disconnected(LIBYATL_DEFAULT_PARAM, hostname(), port(), "Unable to open pidfile in %s for: %s stderr:%s", @@ -242,15 +266,20 @@ bool Server::start() } } - uint32_t this_wait= 0; bool pinged= false; + uint32_t this_wait= 0; { - uint32_t timeout= 20; // This number should be high enough for valgrind startup (which is slow) + uint32_t timeout= 40; // This number should be high enough for valgrind startup (which is slow) uint32_t waited; uint32_t retry; - for (waited= 0, retry= 4; ; retry++, waited+= this_wait) + for (waited= 0, retry= 7; ; retry++, waited+= this_wait) { + if (_app.check() == false) + { + break; + } + if ((pinged= ping()) == true) { break; @@ -260,6 +289,8 @@ bool Server::start() break; } + Error << "ping(" << _app.pid() << ") wait: " << this_wait << " " << hostname() << ":" << port() << " " << error(); + this_wait= retry * retry / 3 + 1; libtest::dream(this_wait, 0); } @@ -327,9 +358,9 @@ void Server::add_option(const std::string& arg) _options.push_back(std::make_pair(arg, std::string())); } -void Server::add_option(const std::string& name, const std::string& value) +void Server::add_option(const std::string& name_, const std::string& value_) { - _options.push_back(std::make_pair(name, value)); + _options.push_back(std::make_pair(name_, value_)); } bool Server::set_socket_file()