From 02d12d6d6e197cb060f65d78312c7ce787183e30 Mon Sep 17 00:00:00 2001
From: Sebastian Hahta <joseha@utu.fi>
Date: Wed, 22 Jul 2020 15:59:55 +0300
Subject: [PATCH] hack to avoid possible issues on hashmap resize

---
 .../net/cpp/include/ftl/net/dispatcher.hpp    | 21 +++++++++++--------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/components/net/cpp/include/ftl/net/dispatcher.hpp b/components/net/cpp/include/ftl/net/dispatcher.hpp
index 1666184c0..ea136483f 100644
--- a/components/net/cpp/include/ftl/net/dispatcher.hpp
+++ b/components/net/cpp/include/ftl/net/dispatcher.hpp
@@ -60,13 +60,16 @@ namespace net {
 
 class Dispatcher {
 	public:
-	explicit Dispatcher(Dispatcher *parent=nullptr) : parent_(parent) {}
-	
+	explicit Dispatcher(Dispatcher *parent=nullptr) : parent_(parent) {
+		// FIXME threading and funcs_; hack use large size
+		funcs_.reserve(1024);
+	}
+
 	//void dispatch(Peer &, const std::string &msg);
 	void dispatch(Peer &, const msgpack::object &msg);
 
 	// Without peer object =====================================================
-	
+
 	template <typename F>
 	void bind(std::string const &name, F func,
 		                  ftl::internal::tags::void_result const &,
@@ -221,11 +224,11 @@ class Dispatcher {
 			funcs_.erase(i);
 		}
 	}
-	
+
 	std::vector<std::string> getBindings() const;
 
 	bool isBound(const std::string &name) const;
-	
+
 	using adaptor_type = std::function<std::unique_ptr<msgpack::object_handle>(
         ftl::net::Peer &, msgpack::object const &)>;
 
@@ -234,16 +237,16 @@ class Dispatcher {
 
     //! \brief This is the type of notification messages.
     using notification_t = std::tuple<int8_t, std::string, msgpack::object>;
-    
+
     using response_t =
         std::tuple<uint32_t, uint32_t, std::string, msgpack::object>;
-	
+
 	private:
 	Dispatcher *parent_;
 	std::unordered_map<std::string, adaptor_type> funcs_;
-	
+
 	std::optional<adaptor_type> _locateHandler(const std::string &name) const;
-	
+
 	static void enforce_arg_count(std::string const &func, std::size_t found,
                                   std::size_t expected);
 
-- 
GitLab