[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r110354: Port timers to OpenBSD, plus
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r110354: Port timers to OpenBSD, plus check for timer failures. |
Date: |
Wed, 03 Oct 2012 17:10:47 -0700 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 110354
committer: Paul Eggert <address@hidden>
branch nick: trunk
timestamp: Wed 2012-10-03 17:10:47 -0700
message:
Port timers to OpenBSD, plus check for timer failures.
OpenBSD problem reported by Han Boetes.
* profiler.c (setup_cpu_timer): Check for failure of timer_settime
and/or setitimer.
(Fprofiler_cpu_stop): Don't assume HAVE_SETITIMER.
* syssignal.h (HAVE_ITIMERSPEC): New macro. This is for platforms
like OpenBSD, which has timer_settime but does not declare it.
OpenBSD does not define SIGEV_SIGNAL, so use that when deciding
whether to use itimerspec-related primitives. All uses of
HAVE_TIMER_SETTIME replaced with HAVE_ITIMERSPEC.
modified:
ChangeLog
src/atimer.c
src/profiler.c
src/syssignal.h
=== modified file 'ChangeLog'
--- a/ChangeLog 2012-09-30 04:19:32 +0000
+++ b/ChangeLog 2012-10-04 00:10:47 +0000
@@ -1,3 +1,16 @@
+2012-10-04 Paul Eggert <address@hidden>
+
+ Port timers to OpenBSD, plus check for timer failures.
+ OpenBSD problem reported by Han Boetes.
+ * profiler.c (setup_cpu_timer): Check for failure of timer_settime
+ and/or setitimer.
+ (Fprofiler_cpu_stop): Don't assume HAVE_SETITIMER.
+ * syssignal.h (HAVE_ITIMERSPEC): New macro. This is for platforms
+ like OpenBSD, which has timer_settime but does not declare it.
+ OpenBSD does not define SIGEV_SIGNAL, so use that when deciding
+ whether to use itimerspec-related primitives. All uses of
+ HAVE_TIMER_SETTIME replaced with HAVE_ITIMERSPEC.
+
2012-09-30 Paul Eggert <address@hidden>
Merge from gnulib, incorporating:
=== modified file 'src/atimer.c'
--- a/src/atimer.c 2012-09-27 01:06:23 +0000
+++ b/src/atimer.c 2012-10-04 00:10:47 +0000
@@ -42,7 +42,7 @@
/* The alarm timer and whether it was properly initialized, if
POSIX timers are available. */
-#ifdef HAVE_TIMER_SETTIME
+#ifdef HAVE_ITIMERSPEC
static timer_t alarm_timer;
static bool alarm_timer_ok;
#endif
@@ -296,7 +296,7 @@
#endif
EMACS_TIME now, interval;
-#ifdef HAVE_TIMER_SETTIME
+#ifdef HAVE_ITIMERSPEC
if (alarm_timer_ok)
{
struct itimerspec ispec;
@@ -416,7 +416,7 @@
init_atimer (void)
{
struct sigaction action;
-#ifdef HAVE_TIMER_SETTIME
+#ifdef HAVE_ITIMERSPEC
struct sigevent sigev;
sigev.sigev_notify = SIGEV_SIGNAL;
sigev.sigev_signo = SIGALRM;
=== modified file 'src/profiler.c'
--- a/src/profiler.c 2012-10-02 19:38:10 +0000
+++ b/src/profiler.c 2012-10-04 00:10:47 +0000
@@ -204,7 +204,7 @@
/* The profiler timer and whether it was properly initialized, if
POSIX timers are available. */
-#ifdef HAVE_TIMER_SETTIME
+#ifdef HAVE_ITIMERSPEC
static timer_t profiler_timer;
static bool profiler_timer_ok;
#endif
@@ -240,7 +240,7 @@
{
Lisp_Object oquit;
EMACS_INT count = 1;
-#ifdef HAVE_TIMER_SETTIME
+#ifdef HAVE_ITIMERSPEC
if (profiler_timer_ok)
{
int overruns = timer_getoverrun (profiler_timer);
@@ -288,7 +288,7 @@
emacs_sigaction_init (&action, deliver_profiler_signal);
sigaction (SIGPROF, &action, 0);
-#ifdef HAVE_TIMER_SETTIME
+#ifdef HAVE_ITIMERSPEC
if (! profiler_timer_ok)
{
/* System clocks to try, in decreasing order of desirability. */
@@ -322,14 +322,18 @@
{
struct itimerspec ispec;
ispec.it_value = ispec.it_interval = interval;
- timer_settime (profiler_timer, 0, &ispec, 0);
- return TIMER_SETTIME_RUNNING;
+ if (timer_settime (profiler_timer, 0, &ispec, 0) == 0)
+ return TIMER_SETTIME_RUNNING;
}
#endif
+#ifdef HAVE_SETITIMER
timer.it_value = timer.it_interval = make_timeval (interval);
- setitimer (ITIMER_PROF, &timer, 0);
- return SETITIMER_RUNNING;
+ if (setitimer (ITIMER_PROF, &timer, 0) == 0)
+ return SETITIMER_RUNNING;
+#endif
+
+ return NOT_RUNNING;
}
DEFUN ("profiler-cpu-start", Fprofiler_cpu_start, Sprofiler_cpu_start,
@@ -367,7 +371,7 @@
case NOT_RUNNING:
return Qnil;
-#ifdef HAVE_TIMER_SETTIME
+#ifdef HAVE_ITIMERSPEC
case TIMER_SETTIME_RUNNING:
{
struct itimerspec disable;
@@ -377,6 +381,7 @@
break;
#endif
+#ifdef HAVE_SETITIMER
case SETITIMER_RUNNING:
{
struct itimerval disable;
@@ -384,6 +389,7 @@
setitimer (ITIMER_PROF, &disable, 0);
}
break;
+#endif
}
signal (SIGPROF, SIG_IGN);
=== modified file 'src/syssignal.h'
--- a/src/syssignal.h 2012-10-01 22:12:44 +0000
+++ b/src/syssignal.h 2012-10-04 00:10:47 +0000
@@ -29,8 +29,12 @@
#define FORWARD_SIGNAL_TO_MAIN_THREAD
#endif
-#if (defined SIGPROF && (defined HAVE_TIMER_SETTIME || defined HAVE_SETITIMER)
\
- && !defined PROFILING)
+#if defined HAVE_TIMER_SETTIME && defined SIGEV_SIGNAL
+# define HAVE_ITIMERSPEC
+#endif
+
+#if (defined SIGPROF && !defined PROFILING \
+ && (defined HAVE_SETITIMER || defined HAVE_ITIMERSPEC))
# define PROFILER_CPU_SUPPORT
#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r110354: Port timers to OpenBSD, plus check for timer failures.,
Paul Eggert <=