[sysprof] Return error when the counter can't be opened.



commit 71f2cd3a64fd20e3c71b58efc415d660d7f38c50
Author: Søren Sandmann Pedersen <sandmann daimi au dk>
Date:   Mon Nov 2 13:30:04 2009 -0500

    Return error when the counter can't be opened.

 collector.c     |   19 ++++++++++---------
 collector.h     |    3 ++-
 tracker.c       |    4 ++--
 treeviewutils.c |   31 +++++++++++++++++++++++++++++++
 treeviewutils.h |    6 ++++++
 5 files changed, 51 insertions(+), 12 deletions(-)
---
diff --git a/collector.c b/collector.c
index 4b75f2d..2b7937c 100644
--- a/collector.c
+++ b/collector.c
@@ -295,7 +295,7 @@ on_read (gpointer data)
     } while (0)
 
 static void *
-map_buffer (counter_t *counter)
+map_buffer (counter_t *counter, GError **err)
 { 
     int n_bytes = N_PAGES * get_page_size();
     void *address, *a;
@@ -331,8 +331,9 @@ map_buffer (counter_t *counter)
 }
 
 static counter_t *
-counter_new (Collector *collector,
-	     int	cpu)
+counter_new (Collector  *collector,
+	     int	 cpu,
+	     GError    **err)
 {
     struct perf_counter_attr attr;
     counter_t *counter;
@@ -370,20 +371,20 @@ counter_new (Collector *collector,
     
     if (fd < 0)
     {
-	fail ("perf_counter_open");
+	g_set_error (err, COLLECTOR_ERROR, COLLECTOR_ERROR_CANT_OPEN_COUNTER,
+		     "Could not open performance counter: %s\n",
+		     strerror (errno));
+
 	return NULL;
     }
 
     counter->collector = collector;
     counter->fd = fd;
 
-    counter->mmap_page = map_buffer (counter);
+    counter->mmap_page = map_buffer (counter, err);
     
     if (counter->mmap_page == MAP_FAILED)
-    {
-	fail ("mmap");
 	return NULL;
-    }
     
     counter->data = (uint8_t *)counter->mmap_page + get_page_size ();
     counter->tail = 0;
@@ -667,7 +668,7 @@ collector_start (Collector  *collector,
     
     for (i = 0; i < n_cpus; ++i)
     {
-	counter_t *counter = counter_new (collector, i);
+	counter_t *counter = counter_new (collector, i, err);
 
 	collector->counters = g_list_append (collector->counters, counter);
     }
diff --git a/collector.h b/collector.h
index 3f9420d..1caa145 100644
--- a/collector.h
+++ b/collector.h
@@ -30,7 +30,8 @@ GQuark collector_error_quark (void);
 
 typedef enum
 {
-    COLLECTOR_ERROR_CANT_OPEN_FILE
+    COLLECTOR_ERROR_CANT_OPEN_FILE,
+    COLLECTOR_ERROR_CANT_OPEN_COUNTER
 } CollectorError;
 
 /* callback is called whenever a new sample arrives */
diff --git a/tracker.c b/tracker.c
index 7b0dc9e..b20c8f0 100644
--- a/tracker.c
+++ b/tracker.c
@@ -763,13 +763,13 @@ lookup_kernel_symbol (gulong address)
     kernel_symbol_t *result;
     GArray *ksyms = get_kernel_symbols ();
     const char *sym;
-    const char *s;
     int i;
 
     if (ksyms->len == 0)
 	return NULL;
 
-    result = do_lookup ((kernel_symbol_t *)ksyms->data, address, 0, ksyms->len - 1);
+    result = do_lookup ((kernel_symbol_t *)ksyms->data,
+			address, 0, ksyms->len - 1);
 
     sym = result? result->name : NULL;
 
diff --git a/treeviewutils.c b/treeviewutils.c
index 7511daf..20d7777 100644
--- a/treeviewutils.c
+++ b/treeviewutils.c
@@ -329,3 +329,34 @@ tree_view_foreach_visible (GtkTreeView *view,
     if (model && gtk_tree_model_get_iter_first (model, &iter))
 	process_iter (view, &iter, callback, data);
 }
+
+/* Not really a *treeview* utility, but there isn't really a
+ * better place to put it
+ */
+void
+set_error (GError **err, gint domain, gint code,
+	   const char *format, va_list args)
+{
+    char *msg;
+    
+    if (!err)
+        return;
+    
+    msg = g_strdup_vprintf (format, args);
+    
+    if (*err == NULL)
+    {
+        *err = g_error_new_literal (G_MARKUP_ERROR, code, msg);
+    }
+    else
+    {
+        /* Warning text from GLib */
+        g_warning ("GError set over the top of a previous GError or uninitialized memory.\n" 
+                   "This indicates a bug in someone's code. You must ensure an error is NULL before it's set.\n"
+                   "The overwriting error message was: %s",
+                   msg);
+    }
+    
+    g_free (msg);
+}
+
diff --git a/treeviewutils.h b/treeviewutils.h
index 9dca0db..a6eb1e5 100644
--- a/treeviewutils.h
+++ b/treeviewutils.h
@@ -47,3 +47,9 @@ typedef void (* VisibleCallback) (GtkTreeView  *view,
 void tree_view_foreach_visible (GtkTreeView *view,
 				VisibleCallback callback,
 				gpointer data);
+
+
+
+void
+set_error_va (GError **err, gint domain, gint code,
+	      const char *format, va_list args);



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