diff --git a/direct/src/dcparser/dcPacker.I b/direct/src/dcparser/dcPacker.I index 6b6ef79ee5..c9212b3302 100644 --- a/direct/src/dcparser/dcPacker.I +++ b/direct/src/dcparser/dcPacker.I @@ -1124,7 +1124,9 @@ operator new(size_t size) { */ INLINE void DCPacker::StackElement:: operator delete(void *ptr) { - StackElement *obj = (StackElement *)ptr; - obj->_next = _deleted_chain; - _deleted_chain = obj; + if (ptr != nullptr) { + StackElement *obj = (StackElement *)ptr; + obj->_next = _deleted_chain; + _deleted_chain = obj; + } } diff --git a/direct/src/distributed/ServerRepository.py b/direct/src/distributed/ServerRepository.py index 966d22923b..ac0f2c6856 100644 --- a/direct/src/distributed/ServerRepository.py +++ b/direct/src/distributed/ServerRepository.py @@ -628,7 +628,7 @@ class ServerRepository: del self.clientsByConnection[client.connection] del self.clientsByDoIdBase[client.doIdBase] - id = client.doIdBase / self.doIdRange + id = client.doIdBase // self.doIdRange self.idAllocator.free(id) self.qcr.removeConnection(client.connection) @@ -689,7 +689,7 @@ class ServerRepository: def clientHardDisconnectTask(self, task): """ client did not tell us he was leaving but we lost connection to him, so we need to update our data and tell others """ - for client in self.clientsByConnection.values(): + for client in list(self.clientsByConnection.values()): if not self.qcr.isConnectionOk(client.connection): self.handleClientDisconnect(client) return Task.cont diff --git a/dtool/src/dtoolbase/deletedChain.h b/dtool/src/dtoolbase/deletedChain.h index 1915223450..a72bc85f96 100644 --- a/dtool/src/dtoolbase/deletedChain.h +++ b/dtool/src/dtoolbase/deletedChain.h @@ -85,7 +85,9 @@ public: return ptr; \ } \ inline void operator delete(void *ptr) { \ - StaticDeletedChain< Type >::deallocate((Type *)ptr, get_type_handle(Type)); \ + if (ptr != nullptr) { \ + StaticDeletedChain< Type >::deallocate((Type *)ptr, get_type_handle(Type)); \ + } \ } \ inline void operator delete(void *, void *) { \ } \ @@ -104,7 +106,9 @@ public: return ptr; \ } \ inline void operator delete(void *ptr) { \ - _deleted_chain.deallocate((Type *)ptr, get_type_handle(Type)); \ + if (ptr != nullptr) { \ + _deleted_chain.deallocate((Type *)ptr, get_type_handle(Type)); \ + } \ } \ inline void operator delete(void *, void *) { \ } \ diff --git a/dtool/src/dtoolbase/memoryBase.h b/dtool/src/dtoolbase/memoryBase.h index d1d9f00ca5..b82e9d1cc0 100644 --- a/dtool/src/dtoolbase/memoryBase.h +++ b/dtool/src/dtoolbase/memoryBase.h @@ -32,7 +32,9 @@ return ptr; \ } \ inline void operator delete(void *ptr) { \ - PANDA_FREE_SINGLE(ptr); \ + if (ptr != nullptr) { \ + PANDA_FREE_SINGLE(ptr); \ + } \ } \ inline void operator delete(void *, void *) { \ } \ @@ -44,7 +46,9 @@ return ptr; \ } \ inline void operator delete[](void *ptr) { \ - PANDA_FREE_ARRAY(ptr); \ + if (ptr != nullptr) { \ + PANDA_FREE_ARRAY(ptr); \ + } \ } \ inline void operator delete[](void *, void *) { \ }