diff options
Diffstat (limited to 'server.patch')
-rw-r--r-- | server.patch | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/server.patch b/server.patch new file mode 100644 index 000000000000..f90e543484c6 --- /dev/null +++ b/server.patch @@ -0,0 +1,37 @@ +diff --git a/server/CVCMIServer.cpp b/server/CVCMIServer.cpp +index b166167a5..640d8837f 100644 +--- a/server/CVCMIServer.cpp ++++ b/server/CVCMIServer.cpp +@@ -375,10 +375,10 @@ class CVCMIServerPackVisitor : public VCMI_LIB_WRAP_NAMESPACE(ICPackVisitor) + { + private: + CVCMIServer & handler; +- CGameHandler & gh; ++ std::shared_ptr<CGameHandler> gh; + + public: +- CVCMIServerPackVisitor(CVCMIServer & handler, CGameHandler & gh) ++ CVCMIServerPackVisitor(CVCMIServer & handler, std::shared_ptr<CGameHandler> gh) + :handler(handler), gh(gh) + { + } +@@ -392,7 +392,9 @@ public: + + virtual void visitForServer(CPackForServer & serverPack) override + { +- gh.handleReceivedPack(&serverPack); ++ if (!gh) ++ throw std::runtime_error("Received game handler pack in lobby!"); ++ gh->handleReceivedPack(&serverPack); + } + + virtual void visitForClient(CPackForClient & clientPack) override +@@ -432,7 +434,7 @@ void CVCMIServer::threadHandleClient(std::shared_ptr<CConnection> c) + break; + } + +- CVCMIServerPackVisitor visitor(*this, *this->gh); ++ CVCMIServerPackVisitor visitor(*this, this->gh); + pack->visit(visitor); + } + #ifndef _MSC_VER |