diff --git a/include/ircd/server/peer.h b/include/ircd/server/peer.h index a89c0abde..056219d5b 100644 --- a/include/ircd/server/peer.h +++ b/include/ircd/server/peer.h @@ -22,7 +22,7 @@ struct ircd::server::peer { struct err; - static constexpr const size_t &LINK_MAX{32}; + static constexpr const size_t &LINK_MAX{16}; static conf::item link_min_default; static conf::item link_max_default; static conf::item error_clear_default; diff --git a/ircd/server.cc b/ircd/server.cc index 3175bc45e..3940e5be7 100644 --- a/ircd/server.cc +++ b/ircd/server.cc @@ -370,11 +370,10 @@ void ircd::server::peer::close(const net::close_opts &opts) { op_fini = true; - assert(!ctx::current); - thread_local link *links[LINK_MAX]; - pointers(this->links, links); - for(size_t i(0); i < this->links.size(); ++i) - links[i]->close(opts); + link *links[LINK_MAX]; + const auto end(pointers(this->links, links)); + for(link **link(links); link != end; ++link) + (*link)->close(opts); if(finished()) return handle_finished(); @@ -867,6 +866,7 @@ ircd::server::peer::handle_resolve(std::exception_ptr eptr, const ipport &ipport) try { + const ctx::critical_assertion ca; assert(op_resolve); op_resolve = false; @@ -891,11 +891,10 @@ try if(op_fini) return; - assert(!ctx::current); - thread_local link *links[LINK_MAX]; - pointers(this->links, links); - for(size_t i(0); i < this->links.size(); ++i) - links[i]->open(open_opts); + link *links[LINK_MAX]; + const auto end(pointers(this->links, links)); + for(link **link(links); link != end; ++link) + (*link)->open(open_opts); } catch(const std::exception &e) {