void blocking_connection_impl::wait(const condition &condition, const std::string &msg, duration wait_timeout) { reactor& reactor = container_->reactor(); if (wait_timeout == duration(-1)) wait_timeout = container_->reactor().timeout(); if (wait_timeout == duration::FOREVER) { while (!condition()) { reactor.process(); } } else { save_timeout st(reactor); reactor.timeout(wait_timeout); pn_timestamp_t deadline = pn_reactor_mark(pn_cast(&reactor)) + wait_timeout.milliseconds; while (!condition()) { reactor.process(); if (!condition()) { pn_timestamp_t now = pn_reactor_mark(pn_cast(&reactor)); if (now < deadline) reactor.timeout(duration(deadline - now)); else throw timeout_error("connection timed out " + msg); } } } }
timestamp reactor::mark() { return timestamp(pn_reactor_mark(pn_object())); }