debug: don't crash if an object is NULL in wp_*_object() and point it out in the log

by using G_TYPE_NONE (== 1), we can pass this in the log handler
to point out the fact that we expected something but it's null

As a bonus, a null object always gets printed in red because that's
the first color in object_colors
This commit is contained in:
George Kiagiadakis
2020-05-20 18:27:09 +03:00
parent a54ff34863
commit b807b666a0
2 changed files with 14 additions and 14 deletions

View File

@@ -287,7 +287,7 @@ wp_log_writer_default (GLogLevelFlags log_level,
}
/* format the message to include the object */
if (cf.object && cf.message) {
if (cf.object_type && cf.message) {
cf.message_field->value = cf.message = full_message =
format_message (&cf);
}
@@ -331,7 +331,6 @@ wp_log_structured_standard (
n_fields++;
}
if (object != NULL) {
if (object_type != 0) {
fields[n_fields].key = "WP_OBJECT_TYPE";
fields[n_fields].value = &object_type;
@@ -339,6 +338,7 @@ wp_log_structured_standard (
n_fields++;
}
if (object != NULL) {
fields[n_fields].key = "WP_OBJECT";
fields[n_fields].value = &object;
fields[n_fields].length = sizeof (gconstpointer);

View File

@@ -54,17 +54,17 @@ void wp_log_structured_standard (const gchar *log_domain,
wp_log (WP_LOG_LEVEL_TRACE, 0, NULL, __VA_ARGS__)
#define wp_critical_object(object, ...) \
wp_log (G_LOG_LEVEL_CRITICAL, G_TYPE_FROM_INSTANCE (object), object, __VA_ARGS__)
wp_log (G_LOG_LEVEL_CRITICAL, (object) ? G_TYPE_FROM_INSTANCE (object) : G_TYPE_NONE, object, __VA_ARGS__)
#define wp_warning_object(object, ...) \
wp_log (G_LOG_LEVEL_WARNING, G_TYPE_FROM_INSTANCE (object), object, __VA_ARGS__)
wp_log (G_LOG_LEVEL_WARNING, (object) ? G_TYPE_FROM_INSTANCE (object) : G_TYPE_NONE, object, __VA_ARGS__)
#define wp_message_object(object, ...) \
wp_log (G_LOG_LEVEL_MESSAGE, G_TYPE_FROM_INSTANCE (object), object, __VA_ARGS__)
wp_log (G_LOG_LEVEL_MESSAGE, (object) ? G_TYPE_FROM_INSTANCE (object) : G_TYPE_NONE, object, __VA_ARGS__)
#define wp_info_object(object, ...) \
wp_log (G_LOG_LEVEL_INFO, G_TYPE_FROM_INSTANCE (object), object, __VA_ARGS__)
wp_log (G_LOG_LEVEL_INFO, (object) ? G_TYPE_FROM_INSTANCE (object) : G_TYPE_NONE, object, __VA_ARGS__)
#define wp_debug_object(object, ...) \
wp_log (G_LOG_LEVEL_DEBUG, G_TYPE_FROM_INSTANCE (object), object, __VA_ARGS__)
wp_log (G_LOG_LEVEL_DEBUG, (object) ? G_TYPE_FROM_INSTANCE (object) : G_TYPE_NONE, object, __VA_ARGS__)
#define wp_trace_object(object, ...) \
wp_log (WP_LOG_LEVEL_TRACE, G_TYPE_FROM_INSTANCE (object), object, __VA_ARGS__)
wp_log (WP_LOG_LEVEL_TRACE, (object) ? G_TYPE_FROM_INSTANCE (object) : G_TYPE_NONE, object, __VA_ARGS__)
#define wp_critical_boxed(type, object, ...) \
wp_log (G_LOG_LEVEL_CRITICAL, type, object, __VA_ARGS__)