Skip to content

Commit db0730f

Browse files
authored
[GEN][ZH] Clear and assert GameWindow user data to avoid dangling pointers and memory leaks (#1027)
1 parent d981516 commit db0730f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+166
-50
lines changed

Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,7 +1016,10 @@ ControlBar::~ControlBar( void )
10161016
m_radarAttackGlowWindow = NULL;
10171017

10181018
if (m_rightHUDCameoWindow && m_rightHUDCameoWindow->winGetUserData())
1019+
{
10191020
delete m_rightHUDCameoWindow->winGetUserData();
1021+
m_rightHUDCameoWindow->winSetUserData(NULL);
1022+
}
10201023

10211024
} // end ~ControlBar
10221025
void ControlBarPopupDescriptionUpdateFunc( WindowLayout *layout, void *param );

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,11 @@ void DeinitLanGameGadgets( void )
751751
listboxChatWindowLanGame = NULL;
752752
textEntryChat = NULL;
753753
textEntryMapDisplay = NULL;
754-
windowMap = NULL;
754+
if (windowMap)
755+
{
756+
windowMap->winSetUserData(NULL);
757+
windowMap = NULL;
758+
}
755759
for (Int i = 0; i < MAX_SLOTS; i++)
756760
{
757761
comboBoxPlayer[i] = NULL;
@@ -1035,6 +1039,9 @@ WindowMsgHandledType LanGameOptionsMenuSystem( GameWindow *window, UnsignedInt m
10351039
//-------------------------------------------------------------------------------------------------
10361040
case GWM_DESTROY:
10371041
{
1042+
if (windowMap)
1043+
windowMap->winSetUserData(NULL);
1044+
10381045
break;
10391046
} // case GWM_DESTROY:
10401047
//-------------------------------------------------------------------------------------------------

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanMapSelectMenu.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,13 @@ static void showLANGameOptionsUnderlyingGUIElements( Bool show )
106106

107107
static void NullifyControls()
108108
{
109-
mapList = NULL;
110-
winMapPreview = NULL;
111109
parent = NULL;
110+
mapList = NULL;
111+
if (winMapPreview)
112+
{
113+
winMapPreview->winSetUserData(NULL);
114+
winMapPreview = NULL;
115+
}
112116
for (Int i=0; i<MAX_SLOTS; ++i)
113117
{
114118
buttonMapStartPosition[i] = NULL;

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/SkirmishGameOptionsMenu.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,6 +1453,9 @@ WindowMsgHandledType SkirmishGameOptionsMenuSystem( GameWindow *window, Unsigned
14531453
//-------------------------------------------------------------------------------------------------
14541454
case GWM_DESTROY:
14551455
{
1456+
if (windowMap)
1457+
windowMap->winSetUserData(NULL);
1458+
14561459
break;
14571460
} // case GWM_DESTROY:
14581461
//-------------------------------------------------------------------------------------------------

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/SkirmishMapSelectMenu.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,13 @@ static NameKeyType winMapPreviewID = NAMEKEY_INVALID;
6767

6868
static void NullifyControls()
6969
{
70-
mapList = NULL;
71-
winMapPreview = NULL;
7270
parent = NULL;
71+
mapList = NULL;
72+
if (winMapPreview)
73+
{
74+
winMapPreview->winSetUserData(NULL);
75+
winMapPreview = NULL;
76+
}
7377
for (Int i=0; i<MAX_SLOTS; ++i)
7478
{
7579
buttonMapStartPosition[i] = NULL;

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1147,7 +1147,11 @@ void DeinitWOLGameGadgets( void )
11471147
listboxGameSetupChat = NULL;
11481148
textEntryChat = NULL;
11491149
textEntryMapDisplay = NULL;
1150-
windowMap = NULL;
1150+
if (windowMap)
1151+
{
1152+
windowMap->winSetUserData(NULL);
1153+
windowMap = NULL;
1154+
}
11511155
// GameWindow *staticTextTitle = NULL;
11521156
for (Int i = 0; i < MAX_SLOTS; i++)
11531157
{
@@ -2407,6 +2411,9 @@ WindowMsgHandledType WOLGameSetupMenuSystem( GameWindow *window, UnsignedInt msg
24072411
//-------------------------------------------------------------------------------------------------
24082412
case GWM_DESTROY:
24092413
{
2414+
if (windowMap)
2415+
windowMap->winSetUserData(NULL);
2416+
24102417
break;
24112418
} // case GWM_DESTROY:
24122419
//-------------------------------------------------------------------------------------------------

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLMapSelectMenu.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,12 @@ static GameWindow *winMapWindow = NULL;
7777
static void NullifyControls(void)
7878
{
7979
parent = NULL;
80-
winMapPreview = NULL;
8180
mapList = NULL;
81+
if (winMapPreview)
82+
{
83+
winMapPreview->winSetUserData(NULL);
84+
winMapPreview = NULL;
85+
}
8286
for (Int i=0; i<MAX_SLOTS; ++i)
8387
{
8488
buttonMapStartPosition[i] = NULL;

Generals/Code/GameEngine/Source/GameClient/GUI/Gadget/GadgetComboBox.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -595,11 +595,9 @@ WindowMsgHandledType GadgetComboBoxSystem( GameWindow *window, UnsignedInt msg,
595595
case GWM_DESTROY:
596596
{
597597
TheWindowManager->winSetLoneWindow(NULL); // if we are transitioning screens, close all combo boxes
598-
if (comboData)
599-
{
600-
delete(comboData);
601-
comboData = NULL;
602-
}
598+
delete (ComboBoxData *)window->winGetUserData();
599+
window->winSetUserData(NULL);
600+
comboData = NULL;
603601
break;
604602
} // end destroy
605603

Generals/Code/GameEngine/Source/GameClient/GUI/Gadget/GadgetHorizontalSlider.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,8 @@ WindowMsgHandledType GadgetHorizontalSliderSystem( GameWindow *window, UnsignedI
437437
// ------------------------------------------------------------------------
438438
case GWM_DESTROY:
439439
delete ( (SliderData *)window->winGetUserData() );
440+
window->winSetUserData(NULL);
441+
s = NULL;
440442
break;
441443

442444
// ------------------------------------------------------------------------

Generals/Code/GameEngine/Source/GameClient/GUI/Gadget/GadgetListBox.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1980,7 +1980,11 @@ WindowMsgHandledType GadgetListBoxSystem( GameWindow *window, UnsignedInt msg,
19801980
delete[]( list->columnWidthPercentage );
19811981
if( list->multiSelect )
19821982
delete[]( list->selections );
1983-
delete( list );
1983+
1984+
delete (ListboxData *)window->winGetUserData();
1985+
window->winSetUserData( NULL );
1986+
list = NULL;
1987+
19841988
break;
19851989

19861990
} // end destroy

0 commit comments

Comments
 (0)