utils: disable object validity check in release builds

This commit is contained in:
Andrei Sabalenka 2025-06-12 22:08:06 +03:00
parent 71f479b4aa
commit 2009b8243e
3 changed files with 18 additions and 1 deletions

View File

@ -410,6 +410,15 @@ set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Timeout multiplier to account
set_option(SDL_EXAMPLES "Build the examples directory")
dep_option(SDL_EXAMPLES_LINK_SHARED "link examples to shared SDL library" "${SDL_SHARED}" "SDL_SHARED;SDL_STATIC" "${SDL_SHARED}")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(SDL_OBJECT_VALIDITY_CHECK_DEFAULT ON)
else()
set(SDL_OBJECT_VALIDITY_CHECK_DEFAULT OFF)
endif()
set_option(SDL_OBJECT_VALIDITY_CHECK "Enable object validity check" ${SDL_OBJECT_VALIDITY_CHECK_DEFAULT})
set(HAVE_OBJECT_VALIDITY_CHECK ${SDL_OBJECT_VALIDITY_CHECK})
if(VITA)
set_option(VIDEO_VITA_PIB "Build with PSVita piglet gles2 support" OFF)
set_option(VIDEO_VITA_PVR "Build with PSVita PVR gles/gles2 support" OFF)

View File

@ -550,6 +550,9 @@
#cmakedefine SDL_DISABLE_WINDOWS_IME 1
#cmakedefine SDL_GDK_TEXTINPUT 1
/* Enable object validity check */
#cmakedefine SDL_OBJECT_VALIDITY_CHECK
/* Platform specific definitions */
#cmakedefine SDL_IPHONE_KEYBOARD 1
#cmakedefine SDL_IPHONE_LAUNCHSCREEN 1

View File

@ -150,6 +150,7 @@ static bool SDL_KeyMatchObject(void *unused, const void *a, const void *b)
void SDL_SetObjectValid(void *object, SDL_ObjectType type, bool valid)
{
#ifdef SDL_OBJECT_VALIDITY_CHECK
SDL_assert(object != NULL);
if (SDL_ShouldInit(&SDL_objects_init)) {
@ -166,6 +167,7 @@ void SDL_SetObjectValid(void *object, SDL_ObjectType type, bool valid)
} else {
SDL_RemoveFromHashTable(SDL_objects, object);
}
#endif
}
bool SDL_ObjectValid(void *object, SDL_ObjectType type)
@ -174,12 +176,15 @@ bool SDL_ObjectValid(void *object, SDL_ObjectType type)
return false;
}
#ifdef SDL_OBJECT_VALIDITY_CHECK
const void *object_type;
if (!SDL_FindInHashTable(SDL_objects, object, &object_type)) {
return false;
}
return (((SDL_ObjectType)(uintptr_t)object_type) == type);
#else
return true;
#endif
}
typedef struct GetOneObjectData