[sysprof] Return error when the counter can't be opened.
- From: Søren Sandmann Pedersen <ssp src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [sysprof] Return error when the counter can't be opened.
- Date: Mon, 2 Nov 2009 19:18:09 +0000 (UTC)
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]