summaryrefslogtreecommitdiff
path: root/src/profiler.c
diff options
context:
space:
mode:
authorKen Brown <kbrown@cornell.edu>2015-06-22 15:26:44 -0400
committerKen Brown <kbrown@cornell.edu>2015-06-22 15:26:44 -0400
commitdc30fb9247d5d9d98ae1c3501d3ffa90e2001a46 (patch)
tree936b1c717c4576558a54387777d033933d077fdc /src/profiler.c
parent567bf811dc83d4e2a770f602fc70df0874aa02e4 (diff)
downloademacs-dc30fb9247d5d9d98ae1c3501d3ffa90e2001a46.tar.gz
Improve diagnostics of profiler-cpu-start
* src/profiler.c (setup_cpu_timer): Change return type to 'int'; return -1 if the sampling interval is invalid. (Fprofiler_cpu_start): Improve error message if 'setup_cpu_timer' fails. (Bug#20843)
Diffstat (limited to 'src/profiler.c')
-rw-r--r--src/profiler.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/profiler.c b/src/profiler.c
index 1b49afe0331..185382c5bd8 100644
--- a/src/profiler.c
+++ b/src/profiler.c
@@ -250,7 +250,7 @@ deliver_profiler_signal (int signal)
deliver_process_signal (signal, handle_profiler_signal);
}
-static enum profiler_cpu_running
+static int
setup_cpu_timer (Lisp_Object sampling_interval)
{
struct sigaction action;
@@ -263,7 +263,7 @@ setup_cpu_timer (Lisp_Object sampling_interval)
? ((EMACS_INT) TYPE_MAXIMUM (time_t) * billion
+ (billion - 1))
: EMACS_INT_MAX)))
- return NOT_RUNNING;
+ return -1;
current_sampling_interval = XINT (sampling_interval);
interval = make_timespec (current_sampling_interval / billion,
@@ -336,9 +336,18 @@ See also `profiler-log-size' and `profiler-max-stack-depth'. */)
profiler_max_stack_depth);
}
- profiler_cpu_running = setup_cpu_timer (sampling_interval);
- if (! profiler_cpu_running)
- error ("Invalid sampling interval");
+ int status = setup_cpu_timer (sampling_interval);
+ if (status == -1)
+ {
+ profiler_cpu_running = NOT_RUNNING;
+ error ("Invalid sampling interval");
+ }
+ else
+ {
+ profiler_cpu_running = status;
+ if (! profiler_cpu_running)
+ error ("Unable to start profiler timer");
+ }
return Qt;
}