From 51d0f1a6a47ba78561bd590f89ec7ab547734231 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Mon, 7 May 2018 23:22:15 -0700 Subject: [PATCH] ircd::server: Use fixed tls vector for copying link pointers. --- include/ircd/server/peer.h | 1 + ircd/server.cc | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/ircd/server/peer.h b/include/ircd/server/peer.h index 9d13af79a..a89c0abde 100644 --- a/include/ircd/server/peer.h +++ b/include/ircd/server/peer.h @@ -22,6 +22,7 @@ struct ircd::server::peer { struct err; + static constexpr const size_t &LINK_MAX{32}; 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 3b0e3b884..3175bc45e 100644 --- a/ircd/server.cc +++ b/ircd/server.cc @@ -370,10 +370,11 @@ void ircd::server::peer::close(const net::close_opts &opts) { op_fini = true; - std::vector links(this->links.size()); + assert(!ctx::current); + thread_local link *links[LINK_MAX]; pointers(this->links, links); - for(const auto &link : links) - link->close(opts); + for(size_t i(0); i < this->links.size(); ++i) + links[i]->close(opts); if(finished()) return handle_finished(); @@ -890,10 +891,11 @@ try if(op_fini) return; - std::vector links(this->links.size()); + assert(!ctx::current); + thread_local link *links[LINK_MAX]; pointers(this->links, links); - for(const auto &link : links) - link->open(open_opts); + for(size_t i(0); i < this->links.size(); ++i) + links[i]->open(open_opts); } catch(const std::exception &e) {