summarylogtreecommitdiffstats
path: root/server.patch
diff options
context:
space:
mode:
Diffstat (limited to 'server.patch')
-rw-r--r--server.patch37
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