@@ -137,6 +137,7 @@ Uint32 SDL_GetNextObjectID(void)
137
137
138
138
static SDL_InitState SDL_objects_init ;
139
139
static SDL_HashTable * SDL_objects ;
140
+ static bool check_validity = true;
140
141
141
142
static Uint32 SDLCALL SDL_HashObject (void * unused , const void * key )
142
143
{
@@ -153,6 +154,11 @@ void SDL_SetObjectValid(void *object, SDL_ObjectType type, bool valid)
153
154
SDL_assert (object != NULL );
154
155
155
156
if (SDL_ShouldInit (& SDL_objects_init )) {
157
+ check_validity = SDL_GetHintBoolean (SDL_HINT_CHECK_OBJECT_VALIDITY , true);
158
+ if (!check_validity ) {
159
+ SDL_SetInitialized (& SDL_objects_init , true);
160
+ return ;
161
+ }
156
162
SDL_objects = SDL_CreateHashTable (0 , true, SDL_HashObject , SDL_KeyMatchObject , NULL , NULL );
157
163
const bool initialized = (SDL_objects != NULL );
158
164
SDL_SetInitialized (& SDL_objects_init , initialized );
@@ -161,10 +167,12 @@ void SDL_SetObjectValid(void *object, SDL_ObjectType type, bool valid)
161
167
}
162
168
}
163
169
164
- if (valid ) {
165
- SDL_InsertIntoHashTable (SDL_objects , object , (void * )(uintptr_t )type , true);
166
- } else {
167
- SDL_RemoveFromHashTable (SDL_objects , object );
170
+ if (check_validity ) {
171
+ if (valid ) {
172
+ SDL_InsertIntoHashTable (SDL_objects , object , (void * )(uintptr_t )type , true);
173
+ } else {
174
+ SDL_RemoveFromHashTable (SDL_objects , object );
175
+ }
168
176
}
169
177
}
170
178
@@ -174,6 +182,10 @@ bool SDL_ObjectValid(void *object, SDL_ObjectType type)
174
182
return false;
175
183
}
176
184
185
+ if (!check_validity ) {
186
+ return true;
187
+ }
188
+
177
189
const void * object_type ;
178
190
if (!SDL_FindInHashTable (SDL_objects , object , & object_type )) {
179
191
return false;
@@ -205,6 +217,9 @@ static bool SDLCALL GetOneObject(void *userdata, const SDL_HashTable *table, con
205
217
206
218
int SDL_GetObjects (SDL_ObjectType type , void * * objects , int count )
207
219
{
220
+ if (!check_validity ) {
221
+ return 0 ;
222
+ }
208
223
GetOneObjectData data = { type , objects , count , 0 };
209
224
SDL_IterateHashTable (SDL_objects , GetOneObject , & data );
210
225
return data .num_objects ;
@@ -236,11 +251,13 @@ static bool SDLCALL LogOneLeakedObject(void *userdata, const SDL_HashTable *tabl
236
251
void SDL_SetObjectsInvalid (void )
237
252
{
238
253
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 ;
254
+ if (check_validity ) {
255
+ // Log any leaked objects
256
+ SDL_IterateHashTable (SDL_objects , LogOneLeakedObject , NULL );
257
+ SDL_assert (SDL_HashTableEmpty (SDL_objects ));
258
+ SDL_DestroyHashTable (SDL_objects );
259
+ SDL_objects = NULL ;
260
+ }
244
261
SDL_SetInitialized (& SDL_objects_init , false);
245
262
}
246
263
}
0 commit comments