(svn r8101) -Fix (runknown): Plug potential memleaks when calling UnInitWindowSystem. The function directly deleted all windows instead of calling their respective deallocators which could then in turn any used memory.

This commit is contained in:
Darkvater 2007-01-13 15:50:36 +00:00
parent 64c30ae737
commit e832a1d046
1 changed files with 11 additions and 6 deletions

View File

@ -902,14 +902,19 @@ void InitWindowSystem(void)
void UnInitWindowSystem(void)
{
Window **wz;
/* Delete all malloced widgets, and reset z-array */
restart_search:
/* Delete all windows, reset z-array.
*When we find the window to delete, we need to restart the search
* as deleting this window could cascade in deleting (many) others
* anywhere in the z-array. We call DeleteWindow() so that it can properly
* release own alloc'd memory, which otherwise could result in memleaks */
FOR_ALL_WINDOWS(wz) {
free((*wz)->widget);
(*wz)->widget = NULL;
(*wz)->widget_count = 0;
*wz = NULL;
DeleteWindow(*wz);
goto restart_search;
}
_last_z_window = _z_windows;
assert(_last_z_window == _z_windows);
}
void ResetWindowSystem(void)