From 49e4e0e76466142438a72d3c7127cd5f21da25b3 Mon Sep 17 00:00:00 2001 From: Krzysztof Sobiecki Date: Sun, 27 Aug 2023 16:41:46 +0200 Subject: [PATCH] [Linux]: Fix other crash in Gargage For some reason game sometimes crashes while in Garbage. --- src/xrGame/quadtree.h | 4 +++- src/xrGame/quadtree_inline.h | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/xrGame/quadtree.h b/src/xrGame/quadtree.h index 5d899843b7d..e5ed80f8d4a 100644 --- a/src/xrGame/quadtree.h +++ b/src/xrGame/quadtree.h @@ -49,7 +49,9 @@ class CQuadTree virtual ~CFixedStorage() { xr_free(m_objects); } IC T* get_object() { - VERIFY(m_free); + if (!m_free) + return nullptr; + T* node = m_free; m_free = m_free->next(); ZeroMemory(node, sizeof(T)); diff --git a/src/xrGame/quadtree_inline.h b/src/xrGame/quadtree_inline.h index a0a82506e8c..25c1d51bc75 100644 --- a/src/xrGame/quadtree_inline.h +++ b/src/xrGame/quadtree_inline.h @@ -92,8 +92,16 @@ IC void CSQuadTree::insert(_object_type* object) if (depth == m_max_depth) { CListItem* list_item = m_list_items->get_object(); + + if (!list_item) + return; + list_item->m_object = object; list_item->m_next = (CListItem*)((void*)(*node)); + + if (!list_item->m_next ) + return; + *node = (CQuadNode*)((void*)list_item); ++m_leaf_count; return; @@ -102,6 +110,9 @@ IC void CSQuadTree::insert(_object_type* object) if (!*node) *node = m_nodes->get_object(); + if (!node) + return; + distance *= .5f; u32 index = neighbour_index(object->position(), center, distance); VERIFY(index < 4); @@ -266,7 +277,9 @@ TEMPLATE_SPECIALIZATION IC _object_type* CSQuadTree::remove( const _object_type* object, CQuadNode*& node, Fvector center, float distance, int depth) { - VERIFY(node); + if (!node) + return nullptr; + if (depth == m_max_depth) { CListItem*& node_leaf = ((CListItem*&)((void*&)(node)));