summaryrefslogtreecommitdiff
path: root/src/3rdparty/squirrel/squirrel/squtils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/squirrel/squirrel/squtils.h')
-rw-r--r--src/3rdparty/squirrel/squirrel/squtils.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/3rdparty/squirrel/squirrel/squtils.h b/src/3rdparty/squirrel/squirrel/squtils.h
index 5f7e2e239..111a1c383 100644
--- a/src/3rdparty/squirrel/squirrel/squtils.h
+++ b/src/3rdparty/squirrel/squirrel/squtils.h
@@ -37,9 +37,13 @@ public:
~sqvector()
{
if(_allocated) {
+ /* Break freeing loops, if this vector (indirectly) links to itself. */
+ size_t allocated_size = _allocated * sizeof(T);
+ _allocated = 0;
+
for(SQUnsignedInteger i = 0; i < _size; i++)
_vals[i].~T();
- SQ_FREE(_vals, (_allocated * sizeof(T)));
+ SQ_FREE(_vals, allocated_size);
}
}
void reserve(SQUnsignedInteger newsize) { _realloc(newsize); }