mrc0mmand / rpms / libguestfs

Forked from rpms/libguestfs 3 years ago
Clone

Blame SOURCES/0088-utils-boot-analysis-Add-magic-asserts-to-some-struct.patch

e76f14
From 3b2ac7b9ac4d8a40c17ae28e255f50704180782b Mon Sep 17 00:00:00 2001
e76f14
From: "Richard W.M. Jones" <rjones@redhat.com>
e76f14
Date: Sat, 14 May 2016 18:45:25 +0100
e76f14
Subject: [PATCH] utils: boot-analysis: Add magic & asserts to some structs.
e76f14
e76f14
I suspected data corruption (but didn't prove it).  This commit just
e76f14
adds some magic numbers to the structs so we will see data corruption
e76f14
quickly if it happens again.
e76f14
e76f14
(cherry picked from commit bf80587367d5f01e493426bbb2cda6099a15e7ab)
e76f14
---
e76f14
 utils/boot-analysis/boot-analysis.c | 9 +++++++++
e76f14
 utils/boot-analysis/boot-analysis.h | 6 ++++++
e76f14
 2 files changed, 15 insertions(+)
e76f14
e76f14
diff --git a/utils/boot-analysis/boot-analysis.c b/utils/boot-analysis/boot-analysis.c
e76f14
index 3d38fe2..3690ed4 100644
e76f14
--- a/utils/boot-analysis/boot-analysis.c
e76f14
+++ b/utils/boot-analysis/boot-analysis.c
e76f14
@@ -571,6 +571,7 @@ set_up_event_handlers (guestfs_h *g, size_t pass)
e76f14
   assert (/* 0 <= pass && */ pass < NR_TEST_PASSES);
e76f14
 
e76f14
   data = &pass_data[pass];
e76f14
+  data->magic = PASS_MAGIC;
e76f14
   data->pass = pass;
e76f14
   data->nr_events = 0;
e76f14
   data->events = NULL;
e76f14
@@ -779,6 +780,7 @@ check_pass_data (void)
e76f14
   const char *message;
e76f14
 
e76f14
   for (i = 0; i < NR_TEST_PASSES; ++i) {
e76f14
+    assert (pass_data[i].magic == PASS_MAGIC);
e76f14
     assert (pass_data[i].pass == i);
e76f14
     assert (pass_data[i].elapsed_ns > 1000);
e76f14
     assert (pass_data[i].nr_events > 0);
e76f14
@@ -890,6 +892,7 @@ add_activity (const char *name, int flags)
e76f14
   if (activities == NULL)
e76f14
     error (EXIT_FAILURE, errno, "realloc");
e76f14
   ret = &activities[nr_activities-1];
e76f14
+  ret->magic = ACTIVITY_MAGIC;
e76f14
   ret->name = strdup (name);
e76f14
   if (ret->name == NULL)
e76f14
     error (EXIT_FAILURE, errno, "strdup");
e76f14
@@ -934,6 +937,9 @@ compare_activities_by_t (const void *av, const void *bv)
e76f14
   const struct activity *a = av;
e76f14
   const struct activity *b = bv;
e76f14
 
e76f14
+  assert (a->magic == ACTIVITY_MAGIC);
e76f14
+  assert (b->magic == ACTIVITY_MAGIC);
e76f14
+
e76f14
   return a->t - b->t;
e76f14
 }
e76f14
 
e76f14
@@ -1028,6 +1034,7 @@ static void
e76f14
 print_activity (struct activity *activity)
e76f14
 {
e76f14
   if (activity->warning) ansi_red (); else ansi_green ();
e76f14
+  assert (activity->magic == ACTIVITY_MAGIC);
e76f14
   print_escaped_string (activity->name);
e76f14
   ansi_restore ();
e76f14
   printf (" %.1fms ±%.1fms ",
e76f14
@@ -1148,6 +1155,8 @@ compare_activities_pointers_by_mean (const void *av, const void *bv)
e76f14
   const struct activity * const *a = av;
e76f14
   const struct activity * const *b = bv;
e76f14
 
e76f14
+  assert ((*a)->magic == ACTIVITY_MAGIC);
e76f14
+  assert ((*b)->magic == ACTIVITY_MAGIC);
e76f14
   return (*b)->mean - (*a)->mean;
e76f14
 }
e76f14
 
e76f14
diff --git a/utils/boot-analysis/boot-analysis.h b/utils/boot-analysis/boot-analysis.h
e76f14
index a07f12e..38cd339 100644
e76f14
--- a/utils/boot-analysis/boot-analysis.h
e76f14
+++ b/utils/boot-analysis/boot-analysis.h
e76f14
@@ -24,6 +24,9 @@
e76f14
 
e76f14
 /* Per-pass data collected. */
e76f14
 struct pass_data {
e76f14
+#define PASS_MAGIC 0x45545545
e76f14
+  uint32_t magic;		/* Struct magic. */
e76f14
+
e76f14
   size_t pass;
e76f14
   struct timespec start_t;
e76f14
   struct timespec end_t;
e76f14
@@ -67,6 +70,9 @@ extern struct pass_data pass_data[NR_TEST_PASSES];
e76f14
  * long they take (mean, variance, standard deviation of length).
e76f14
  */
e76f14
 struct activity {
e76f14
+#define ACTIVITY_MAGIC 0xAC1AC1AC
e76f14
+  uint32_t magic;		/* Struct magic. */
e76f14
+
e76f14
   char *name;                   /* Name of this activity. */
e76f14
   int flags;
e76f14
 #define LONG_ACTIVITY 1         /* Expected to take a long time. */
e76f14
-- 
e76f14
1.8.3.1
e76f14