Fix memory leaks with stacks
:100644 100644 1a7cfa7... 73ef404... M ChangeLog
:100644 100644 1297ed7... ee8bade... M syx/syx-memory.c
:100644 100644 156c26e... 7128fcf... M syx/syx-stack.c
:100644 100644 805f250... 4fc74cf... M syx/syx-stack.h
diff --git a/ChangeLog b/ChangeLog
index 1a7cfa7..73ef404 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2009-05-24 Luca Bruno <letha...@gmail.com>
+ * syx/syx-memory.c (syx_memory_clear, _syx_memory_gc_compact): free stacks to avoid memory leaks
+
+ * syx/syx-stack.c (syx_stack_free): added
+
* syx/syx-interp.c (syx_interp_init): reset state
* syx/syx-init.c (syx_initialize_system): use the right startupProcess variable
diff --git a/syx/syx-memory.c b/syx/syx-memory.c
index 1297ed7..ee8bade 100644
--- a/syx/syx-memory.c
+++ b/syx/syx-memory.c
@@ -295,7 +295,9 @@ syx_memory_clear (void)
oop = _syx_memory_start;
while (oop < _syx_memory_pointer)
{
- if (SYX_IS_TRUE (SYX_CLASS_FINALIZATION (SYX_OBJECT (oop)->klass)))
+ if (SYX_IS_STACK (oop))
+ syx_stack_free (SYX_STACK (oop));
+ else if (SYX_IS_TRUE (SYX_CLASS_FINALIZATION (SYX_OBJECT (oop)->klass)))
{
process = syx_process_new ();
context = syx_send_unary_message (SYX_OOP (oop), "finalize");
@@ -484,6 +486,8 @@ _syx_memory_gc_compact (void)
while (!_syx_memory_is_marked (p) && p < _syx_memory_pointer)
{
+ if (SYX_IS_STACK (p))
+ syx_stack_free (SYX_STACK (p));
/* FIXME: finalize */
p += syx_object_size (SYX_OBJECT (p));
}
@@ -514,6 +518,8 @@ _syx_memory_gc_compact (void)
}
else
{
+ if (SYX_IS_STACK (from))
+ syx_stack_free (SYX_STACK (from));
/* FIXME: finalize */
from += size;
}
diff --git a/syx/syx-stack.c b/syx/syx-stack.c
index 156c26e..7128fcf 100644
--- a/syx/syx-stack.c
+++ b/syx/syx-stack.c
@@ -61,6 +61,15 @@ syx_stack_new_data (syx_int32 size, SyxOop *data)
}
/*!
+ Frees the memory allocated for the stack.
+*/
+void
+syx_stack_free (SyxStack *stack)
+{
+ syx_free (SYX_STACK_BOTTOM (stack));
+}
+
+/*!
Returns the effective number of oops used in the stack
*/
syx_arrsize
diff --git a/syx/syx-stack.h b/syx/syx-stack.h
index 805f250..4fc74cf 100644
--- a/syx/syx-stack.h
+++ b/syx/syx-stack.h
@@ -52,6 +52,7 @@ struct SyxStack
#define syx_sizeof_stack (sizeof (SyxStack))
EXPORT SyxOop syx_stack_new (syx_arrsize size) SYX_GNUC_WARN_UNUSED_RESULT;
EXPORT SyxOop syx_stack_new_data (syx_arrsize size, SyxOop *data) SYX_GNUC_WARN_UNUSED_RESULT;
+EXPORT void syx_stack_free (SyxStack *stack);
EXPORT syx_arrsize syx_stack_used_size (SyxStack *stack) SYX_GNUC_WARN_UNUSED_RESULT SYX_GNUC_PURE;
SYX_END_DECLS