Fix several memory leaks.
diff --git a/server/registry.c b/server/registry.c
index 2fe4480..1c7a0d8 100644
--- a/server/registry.c
+++ b/server/registry.c
@@ -320,11 +320,13 @@
free( key->values[i].name );
if (key->values[i].data) free( key->values[i].data );
}
+ if (key->values) free( key->values );
for (i = 0; i <= key->last_subkey; i++)
{
key->subkeys[i]->parent = NULL;
release_object( key->subkeys[i] );
}
+ if (key->subkeys) free( key->subkeys );
/* unconditionally notify everything waiting on this key */
while ((ptr = list_head( &key->notify_list )))
{
@@ -1671,7 +1673,11 @@
if (save_timeout_user) remove_timeout_user( save_timeout_user );
save_timeout_user = NULL;
- for (i = 0; i < save_branch_count; i++) release_object( save_branch_info[i].key );
+ for (i = 0; i < save_branch_count; i++)
+ {
+ release_object( save_branch_info[i].key );
+ free( save_branch_info[i].path );
+ }
release_object( root_key );
}
diff --git a/server/window.c b/server/window.c
index da20d03..750b2b3 100644
--- a/server/window.c
+++ b/server/window.c
@@ -838,7 +838,11 @@
}
else
{
- if (win->update_region) inc_window_paint_count( win, -1 );
+ if (win->update_region)
+ {
+ inc_window_paint_count( win, -1 );
+ free_region( win->update_region );
+ }
win->paint_flags &= ~(PAINT_ERASE | PAINT_NONCLIENT);
win->update_region = NULL;
if (region) free_region( region );