From 847139d26929fb8e97c58a7a34a21b95f0855b94 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 16 Feb 2018 10:51:37 -0500 Subject: [PATCH] object: only print stacktraces when debugging enabled We have a bunch of corruption right now spamming the log. This commit gets rid of the spam unless G_MESSAGES_DEBUG is set. --- gi/object.cpp | 105 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 44 deletions(-) diff --git a/gi/object.cpp b/gi/object.cpp index e77de884..c2eb7dae 100644 --- a/gi/object.cpp 2018-01-27 17:38:36.000000000 -0500 +++ b/gi/object.cpp 2018-02-16 13:14:15.834892741 -0500 @@ -89,6 +89,29 @@ GJS_DEFINE_PRIV_FROM_JS(ObjectInstance, static void disassociate_js_gobject (GObject *gobj); +static void +gjs_log_stacktrace(const char *format, + ...) +{ + const char *domain; + va_list args; + + domain = g_getenv("G_MESSAGES_DEBUG"); + + if (!domain) + return; + + if (!g_str_equal(domain, "all") && + !strstr(domain, G_LOG_DOMAIN)) + return; + + va_start(args, format); + g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args); + va_end(args); + + gjs_dumpstack(); +} + typedef enum { SOME_ERROR_OCCURRED = false, NO_SUCH_G_PROPERTY, @@ -410,12 +433,11 @@ object_instance_get_prop(JSContext return true; if (priv->g_object_finalized) { - g_critical("Object %s.%s (%p), has been already finalized. " - "Impossible to get any property from it.", - priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", - priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), - priv->gobj); - gjs_dumpstack(); + gjs_log_stacktrace("Object %s.%s (%p), has been already finalized. " + "Impossible to get any property from it.", + priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", + priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), + priv->gobj); return true; } @@ -530,12 +552,11 @@ object_instance_set_prop(JSContext return result.succeed(); if (priv->g_object_finalized) { - g_critical("Object %s.%s (%p), has been already finalized. " - "Impossible to set any property to it.", - priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", - priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), - priv->gobj); - gjs_dumpstack(); + gjs_log_stacktrace("Object %s.%s (%p), has been already finalized. " + "Impossible to set any property to it.", + priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", + priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), + priv->gobj); return result.succeed(); } @@ -777,12 +798,11 @@ object_instance_resolve(JSContext } if (priv->g_object_finalized) { - g_critical("Object %s.%s (%p), has been already finalized. " - "Impossible to resolve it.", - priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", - priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), - priv->gobj); - gjs_dumpstack(); + gjs_log_stacktrace("Object %s.%s (%p), has been already finalized. " + "Impossible to resolve it.", + priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", + priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), + priv->gobj); *resolved = false; return true; @@ -1471,11 +1491,11 @@ object_instance_trace(JSTracer *tracer, return; if (priv->g_object_finalized) { - g_debug("Object %s.%s (%p), has been already finalized. " - "Impossible to trace it.", - priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", - priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), - priv->gobj); + gjs_log_stacktrace("Object %s.%s (%p), has been already finalized. " + "Impossible to trace it.", + priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", + priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), + priv->gobj); return; } @@ -1680,13 +1700,12 @@ real_connect_func(JSContext *context, return false; } if (priv->g_object_finalized) { - g_critical("Object %s.%s (%p), has been already deallocated - impossible to connect to signal. " - "This might be caused by the fact that the object has been destroyed from C " - "code using something such as destroy(), dispose(), or remove() vfuncs", - priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", - priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), - priv->gobj); - gjs_dumpstack(); + gjs_log_stacktrace("Object %s.%s (%p), has been already deallocated - impossible to connect to signal. " + "This might be caused by the fact that the object has been destroyed from C " + "code using something such as destroy(), dispose(), or remove() vfuncs", + priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", + priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), + priv->gobj); return true; } @@ -1777,13 +1796,12 @@ emit_func(JSContext *context, } if (priv->g_object_finalized) { - g_critical("Object %s.%s (%p), has been already deallocated - impossible to emit signal. " - "This might be caused by the fact that the object has been destroyed from C " - "code using something such as destroy(), dispose(), or remove() vfuncs", - priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", - priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), - priv->gobj); - gjs_dumpstack(); + gjs_log_stacktrace("Object %s.%s (%p), has been already deallocated - impossible to emit signal. " + "This might be caused by the fact that the object has been destroyed from C " + "code using something such as destroy(), dispose(), or remove() vfuncs", + priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", + priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), + priv->gobj); return true; } @@ -2197,13 +2215,12 @@ gjs_typecheck_object(JSContext *co } if (priv->g_object_finalized) { - g_critical("Object %s.%s (%p), has been already deallocated - impossible to access to it. " - "This might be caused by the fact that the object has been destroyed from C " - "code using something such as destroy(), dispose(), or remove() vfuncs", - priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", - priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), - priv->gobj); - gjs_dumpstack(); + gjs_log_stacktrace("Object %s.%s (%p), has been already deallocated - impossible to access to it. " + "This might be caused by the fact that the object has been destroyed from C " + "code using something such as destroy(), dispose(), or remove() vfuncs", + priv->info ? g_base_info_get_namespace( (GIBaseInfo*) priv->info) : "", + priv->info ? g_base_info_get_name( (GIBaseInfo*) priv->info) : g_type_name(priv->gtype), + priv->gobj); return true; } -- 2.14.3