[dconf] blame mode: record all writes, not just the first



commit f5ecb0181dd680260bc11e73ae739f4a02ed6b75
Author: Ryan Lortie <desrt desrt ca>
Date:   Wed Mar 7 15:26:57 2012 -0500

    blame mode: record all writes, not just the first

 service/dconf-state.h |    2 +-
 service/service.c     |   21 ++++++++++++---------
 2 files changed, 13 insertions(+), 10 deletions(-)
---
diff --git a/service/dconf-state.h b/service/dconf-state.h
index 40c08af..6a2ac58 100644
--- a/service/dconf-state.h
+++ b/service/dconf-state.h
@@ -6,7 +6,7 @@
 typedef struct
 {
   gboolean blame_mode;
-  gchar *blame_info;
+  GString *blame_info;
   gboolean is_session;
   GMainLoop *main_loop;
   guint64 serial;
diff --git a/service/service.c b/service/service.c
index 106c683..84ede50 100644
--- a/service/service.c
+++ b/service/service.c
@@ -151,7 +151,12 @@ gather_blame_info (DConfState      *state,
   GVariant *reply;
   GString *info;
 
-  info = g_string_new (NULL);
+  if (state->blame_info == NULL)
+    state->blame_info = g_string_new (NULL);
+  else
+    g_string_append (state->blame_info, "\n====================================================================\n");
+
+  info = state->blame_info;
 
   g_string_append_printf (info, "Sender: %s\n", sender);
   g_string_append_printf (info, "Object path: %s\n", object_path);
@@ -204,8 +209,6 @@ gather_blame_info (DConfState      *state,
         g_error_free (error);
       }
   }
-
-  state->blame_info = g_string_free (info, FALSE);
 }
 
 static void
@@ -224,7 +227,7 @@ method_call (GDBusConnection       *connection,
   state = dconf_writer_get_state (writer);
 
   /* debugging... */
-  if (state->blame_mode && state->blame_info == NULL)
+  if G_UNLIKELY (state->blame_mode)
     gather_blame_info (state, connection, sender, object_path, method_name, parameters);
 
   if (strcmp (method_name, "Write") == 0)
@@ -370,16 +373,16 @@ writer_info_method (GDBusConnection       *connection,
 {
   DConfState *state = user_data;
 
-  /* debugging... */
-  if (state->blame_mode && state->blame_info == NULL)
+  /* only record this if it's the first */
+  if G_UNLIKELY (state->blame_mode && state->blame_info == NULL)
     gather_blame_info (state, connection, sender, object_path, method_name, parameters);
 
   if (g_str_equal (method_name, "Blame"))
     {
       if (state->blame_info == NULL)
-        state->blame_info = g_strdup ("DCONF_BLAME is not in the environment of dconf-service\n");
+        state->blame_info = g_string_new ("DCONF_BLAME is not in the environment of dconf-service\n");
 
-      g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", state->blame_info));
+      g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", state->blame_info->str));
     }
 
   else
@@ -398,7 +401,7 @@ writer_info_get_property (GDBusConnection  *connection,
   DConfState *state = user_data;
 
   /* debugging... */
-  if (state->blame_mode && state->blame_info == NULL)
+  if G_UNLIKELY (state->blame_mode)
     gather_blame_info (state, connection, sender, object_path, "GetProperty", NULL);
 
   return g_variant_new_string (state->shm_dir);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]