Mercurial > hg > openttd
changeset 5642:f06a25e04204 draft
(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.
author | Darkvater <Darkvater@openttd.org> |
---|---|
date | Sat, 13 Jan 2007 15:50:36 +0000 |
parents | b6eba323824b |
children | 00155b55016f |
files | src/window.cpp |
diffstat | 1 files changed, 11 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/window.cpp +++ b/src/window.cpp @@ -902,14 +902,19 @@ 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)