18
18
misrepresented as being the original software.
19
19
3. This notice may not be removed or altered from any source distribution.
20
20
*/
21
+ #include "SDL3/SDL_hints.h"
21
22
#include "SDL_internal.h"
22
23
23
24
#if defined(HAVE_GETHOSTNAME ) && !defined(SDL_PLATFORM_WINDOWS )
@@ -137,6 +138,7 @@ Uint32 SDL_GetNextObjectID(void)
137
138
138
139
static SDL_InitState SDL_objects_init ;
139
140
static SDL_HashTable * SDL_objects ;
141
+ static bool check_validity = true;
140
142
141
143
static Uint32 SDLCALL SDL_HashObject (void * unused , const void * key )
142
144
{
@@ -153,6 +155,11 @@ void SDL_SetObjectValid(void *object, SDL_ObjectType type, bool valid)
153
155
SDL_assert (object != NULL );
154
156
155
157
if (SDL_ShouldInit (& SDL_objects_init )) {
158
+ check_validity = SDL_GetHintBoolean (SDL_HINT_CHECK_OBJECT_VALIDITY , true);
159
+ if (!check_validity ) {
160
+ SDL_SetInitialized (& SDL_objects_init , true);
161
+ return ;
162
+ }
156
163
SDL_objects = SDL_CreateHashTable (0 , true, SDL_HashObject , SDL_KeyMatchObject , NULL , NULL );
157
164
const bool initialized = (SDL_objects != NULL );
158
165
SDL_SetInitialized (& SDL_objects_init , initialized );
@@ -161,10 +168,12 @@ void SDL_SetObjectValid(void *object, SDL_ObjectType type, bool valid)
161
168
}
162
169
}
163
170
164
- if (valid ) {
165
- SDL_InsertIntoHashTable (SDL_objects , object , (void * )(uintptr_t )type , true);
166
- } else {
167
- SDL_RemoveFromHashTable (SDL_objects , object );
171
+ if (check_validity ) {
172
+ if (valid ) {
173
+ SDL_InsertIntoHashTable (SDL_objects , object , (void * )(uintptr_t )type , true);
174
+ } else {
175
+ SDL_RemoveFromHashTable (SDL_objects , object );
176
+ }
168
177
}
169
178
}
170
179
@@ -174,6 +183,10 @@ bool SDL_ObjectValid(void *object, SDL_ObjectType type)
174
183
return false;
175
184
}
176
185
186
+ if (!check_validity ) {
187
+ return true;
188
+ }
189
+
177
190
const void * object_type ;
178
191
if (!SDL_FindInHashTable (SDL_objects , object , & object_type )) {
179
192
return false;
@@ -205,6 +218,9 @@ static bool SDLCALL GetOneObject(void *userdata, const SDL_HashTable *table, con
205
218
206
219
int SDL_GetObjects (SDL_ObjectType type , void * * objects , int count )
207
220
{
221
+ if (!check_validity ) {
222
+ return 0 ;
223
+ }
208
224
GetOneObjectData data = { type , objects , count , 0 };
209
225
SDL_IterateHashTable (SDL_objects , GetOneObject , & data );
210
226
return data .num_objects ;
@@ -236,11 +252,13 @@ static bool SDLCALL LogOneLeakedObject(void *userdata, const SDL_HashTable *tabl
236
252
void SDL_SetObjectsInvalid (void )
237
253
{
238
254
if (SDL_ShouldQuit (& SDL_objects_init )) {
239
- // Log any leaked objects
240
- SDL_IterateHashTable (SDL_objects , LogOneLeakedObject , NULL );
241
- SDL_assert (SDL_HashTableEmpty (SDL_objects ));
242
- SDL_DestroyHashTable (SDL_objects );
243
- SDL_objects = NULL ;
255
+ if (check_validity ) {
256
+ // Log any leaked objects
257
+ SDL_IterateHashTable (SDL_objects , LogOneLeakedObject , NULL );
258
+ SDL_assert (SDL_HashTableEmpty (SDL_objects ));
259
+ SDL_DestroyHashTable (SDL_objects );
260
+ SDL_objects = NULL ;
261
+ }
244
262
SDL_SetInitialized (& SDL_objects_init , false);
245
263
}
246
264
}
0 commit comments