diff --git a/client/CMT.cpp b/client/CMT.cpp index 45199effc..01fd32bb6 100644 --- a/client/CMT.cpp +++ b/client/CMT.cpp @@ -481,6 +481,7 @@ static void quitApplication() vstd::clear_pointer(graphics); } + vstd::clear_pointer(CSH); vstd::clear_pointer(VLC); vstd::clear_pointer(console);// should be removed after everything else since used by logging diff --git a/lib/networkPacks/NetPacksBase.h b/lib/networkPacks/NetPacksBase.h index dc22af57e..b77e92e94 100644 --- a/lib/networkPacks/NetPacksBase.h +++ b/lib/networkPacks/NetPacksBase.h @@ -20,7 +20,9 @@ class ICPackVisitor; struct DLL_LINKAGE CPack { - std::shared_ptr<CConnection> c; // Pointer to connection that pack received from + /// Pointer to connection that pack received from + /// Only set & used on server + std::shared_ptr<CConnection> c; CPack() = default; virtual ~CPack() = default; diff --git a/lib/serializer/BinaryDeserializer.cpp b/lib/serializer/BinaryDeserializer.cpp index 0cb95f14a..6efa9ed18 100644 --- a/lib/serializer/BinaryDeserializer.cpp +++ b/lib/serializer/BinaryDeserializer.cpp @@ -23,4 +23,9 @@ BinaryDeserializer::BinaryDeserializer(IBinaryReader * r): CLoaderBase(r) registerTypes(*this); } +BinaryDeserializer::~BinaryDeserializer() +{ + +} + VCMI_LIB_NAMESPACE_END diff --git a/lib/serializer/BinaryDeserializer.h b/lib/serializer/BinaryDeserializer.h index 0f880baaf..09cd89efe 100644 --- a/lib/serializer/BinaryDeserializer.h +++ b/lib/serializer/BinaryDeserializer.h @@ -140,12 +140,12 @@ public: si32 fileVersion; std::map<ui32, void*> loadedPointers; - std::map<ui32, const std::type_info*> loadedPointersTypes; std::map<const void*, std::shared_ptr<void>> loadedSharedPointers; bool smartPointerSerialization; bool saving; BinaryDeserializer(IBinaryReader * r); + ~BinaryDeserializer(); template<class T> BinaryDeserializer & operator&(T & t) @@ -279,7 +279,6 @@ public: { // We already got this pointer // Cast it in case we are loading it to a non-first base pointer - assert(loadedPointersTypes.count(pid)); data = static_cast<T>(i->second); return; } @@ -313,10 +312,7 @@ public: void ptrAllocated(const T *ptr, ui32 pid) { if(smartPointerSerialization && pid != 0xffffffff) - { - loadedPointersTypes[pid] = &typeid(T); loadedPointers[pid] = (void*)ptr; //add loaded pointer to our lookup map; cast is to avoid errors with const T* pt - } } template<typename Base, typename Derived> void registerType(const Base * b = nullptr, const Derived * d = nullptr) diff --git a/lib/serializer/Connection.cpp b/lib/serializer/Connection.cpp index a4ad78056..c712c383b 100644 --- a/lib/serializer/Connection.cpp +++ b/lib/serializer/Connection.cpp @@ -269,13 +269,7 @@ CPack * CConnection::retrievePack() iser & pack; logNetwork->trace("Received CPack of type %s", (pack ? typeid(*pack).name() : "nullptr")); if(pack == nullptr) - { logNetwork->error("Received a nullptr CPack! You should check whether client and server ABI matches."); - } - else - { - pack->c = this->shared_from_this(); - } enableBufferedRead = false; diff --git a/server/CVCMIServer.cpp b/server/CVCMIServer.cpp index e9651f91c..46b8be27f 100644 --- a/server/CVCMIServer.cpp +++ b/server/CVCMIServer.cpp @@ -445,6 +445,7 @@ void CVCMIServer::threadHandleClient(std::shared_ptr<CConnection> c) try { pack = c->retrievePack(); + pack->c = c; } catch(boost::system::system_error & e) {