log: Make the message buffer static. Now we don't have to worry about allocation failure, or performance issues or changes to the allocation layout when trying to track down subtle bugs.
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
diff --git a/src/SDL_log.c b/src/SDL_log.c
index b31574d..b56bdbb 100644
--- a/src/SDL_log.c
+++ b/src/SDL_log.c
@@ -284,7 +284,7 @@ GetCategoryPrefix(int category)
void
SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
{
- char *message;
+ static char message[SDL_MAX_LOG_MESSAGE]
size_t len;
/* Nothing to do if we don't have an output function */
@@ -302,9 +302,13 @@ SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list
return;
}
- message = (char *) SDL_malloc(SDL_MAX_LOG_MESSAGE);
- if (!message) {
- return;
+ if (!log_function_mutex) {
+ /* this mutex creation can race if you log from two threads at startup. You should have called SDL_Init first! */
+ log_function_mutex = SDL_CreateMutex();
+ }
+
+ if (log_function_mutex) {
+ SDL_LockMutex(log_function_mutex);
}
SDL_vsnprintf(message, SDL_MAX_LOG_MESSAGE, fmt, ap);
@@ -318,11 +322,11 @@ SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list
}
}
- /* this mutex creation can race if you log from two threads at startup. You should have called SDL_Init first! */
- if (!log_function_mutex) { log_function_mutex = SDL_CreateMutex(); }
- if (log_function_mutex) { SDL_LockMutex(log_function_mutex); }
SDL_log_function(SDL_log_userdata, category, priority, message);
- if (log_function_mutex) { SDL_UnlockMutex(log_function_mutex); }
+
+ if (log_function_mutex) {
+ SDL_UnlockMutex(log_function_mutex);
+ }
SDL_free(message);
}