assert: allow assertions to work on platforms without threads. Partially fixes Bugzilla #3459.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
diff --git a/src/SDL_assert.c b/src/SDL_assert.c
index 1ce40bb..67710d4 100644
--- a/src/SDL_assert.c
+++ b/src/SDL_assert.c
@@ -53,7 +53,10 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata);
*/
static SDL_assert_data *triggered_assertions = NULL;
+#ifndef SDL_THREADS_DISABLED
static SDL_mutex *assertion_mutex = NULL;
+#endif
+
static SDL_AssertionHandler assertion_handler = SDL_PromptAssertion;
static void *assertion_userdata = NULL;
@@ -265,10 +268,11 @@ SDL_assert_state
SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file,
int line)
{
- static int assertion_running = 0;
- static SDL_SpinLock spinlock = 0;
SDL_assert_state state = SDL_ASSERTION_IGNORE;
+ static int assertion_running = 0;
+#ifndef SDL_THREADS_DISABLED
+ static SDL_SpinLock spinlock = 0;
SDL_AtomicLock(&spinlock);
if (assertion_mutex == NULL) { /* never called SDL_Init()? */
assertion_mutex = SDL_CreateMutex();
@@ -282,6 +286,7 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file,
if (SDL_LockMutex(assertion_mutex) < 0) {
return SDL_ASSERTION_IGNORE; /* oh well, I guess. */
}
+#endif
/* doing this because Visual C is upset over assigning in the macro. */
if (data->trigger_count == 0) {
@@ -325,7 +330,10 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file,
}
assertion_running--;
+
+#ifndef SDL_THREADS_DISABLED
SDL_UnlockMutex(assertion_mutex);
+#endif
return state;
}
@@ -334,10 +342,12 @@ SDL_ReportAssertion(SDL_assert_data *data, const char *func, const char *file,
void SDL_AssertionsQuit(void)
{
SDL_GenerateAssertionReport();
+#ifndef SDL_THREADS_DISABLED
if (assertion_mutex != NULL) {
SDL_DestroyMutex(assertion_mutex);
assertion_mutex = NULL;
}
+#endif
}
void SDL_SetAssertionHandler(SDL_AssertionHandler handler, void *userdata)