annotate src/atimer.c @ 27524:67501e6e8b34

(x_delete_display): Update next_noop_dpyinfo to ensure that XTread_socket does not crash by trying to call XNoOp on a closed display.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 30 Jan 2000 21:12:53 +0000
parents 7580a16f676c
children cf2edc15eaa9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27433
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1 /* Asynchronous timers.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2 Copyright (C) 2000 Free Software Foundation, Inc.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 any later version.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 #include <config.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 #include <lisp.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 #include <signal.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 #include <syssignal.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25 #include <systime.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26 #include <blockinput.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 #include <atimer.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 #include <stdio.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 #ifdef HAVE_UNISTD_H
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 #include <unistd.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 #endif
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 #ifdef HAVE_SYS_TIME_H
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 #include <sys/time.h>
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 #endif
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 /* The ubiquitous min/max macros. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40 #define max(X, Y) ((X) > (Y) ? (X) : (Y))
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41 #define min(X, Y) ((X) < (Y) ? (X) : (Y))
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 /* Free-list of atimer structures. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 static struct atimer *free_atimers;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 /* List of active atimers, sorted by expiration time. The timer that
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 will become ripe next is always at the front of this list. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 static struct atimer *atimers;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 /* Non-zero means alarm_signal_handler has found ripe timers but
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 interrupt_input_blocked was non-zero. In this case, timer
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 functions are not called until the next UNBLOCK_INPUT because timer
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 functions are expected to call X, and X cannot be assumed to be
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 reentrant. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 int pending_atimers;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 /* Block/unblock SIGALRM.. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 #define BLOCK_ATIMERS sigblock (sigmask (SIGALRM))
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63 #define UNBLOCK_ATIMERS sigunblock (sigmask (SIGALRM))
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 /* Function prototypes. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 static void set_alarm P_ ((void));
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 static void schedule_atimer P_ ((struct atimer *));
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 /* Start a new atimer of type TYPE. TIME specifies when the timer is
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 ripe. FN is the function to call when the timer fires.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 CLIENT_DATA is stored in the client_data member of the atimer
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 structure returned and so made available to FN when it is called.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 If TYPE is ATIMER_ABSOLUTE, TIME is the absolute time at which the
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 timer fires.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 If TYPE is ATIMER_RELATIVE, the timer is ripe TIME s/us in the
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 future.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 In both cases, the timer is automatically freed after it has fired.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 If TYPE is ATIMER_CONTINUOUS, the timer fires every TIME s/us.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 Value is a pointer to the atimer started. It can be used in calls
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 to cancel_atimer; don't free it yourself. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89 struct atimer *
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 start_atimer (type, time, fn, client_data)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 enum atimer_type type;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 EMACS_TIME time;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 atimer_callback fn;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 void *client_data;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 struct atimer *t;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 /* Round TIME up to the next full second if we don't have
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99 itimers. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 #ifndef HAVE_SETITIMER
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101 if (EMACS_USECS (time) != 0)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 {
27452
7580a16f676c (start_atimer) [!HAVE_SETITIMER]: Use EMACS_SET_SECS
Eli Zaretskii <eliz@gnu.org>
parents: 27433
diff changeset
103 EMACS_SET_USECS (time, 0);
7580a16f676c (start_atimer) [!HAVE_SETITIMER]: Use EMACS_SET_SECS
Eli Zaretskii <eliz@gnu.org>
parents: 27433
diff changeset
104 EMACS_SET_SECS (time, EMACS_SECS (time) + 1);
27433
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106 #endif /* not HAVE_SETITIMER */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108 /* Get an atimer structure from the free-list, or allocate
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 a new one. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 if (free_atimers)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 t = free_atimers;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 free_atimers = t->next;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 else
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116 t = (struct atimer *) xmalloc (sizeof *t);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 /* Fill the atimer structure. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119 bzero (t, sizeof *t);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 t->type = type;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121 t->fn = fn;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122 t->client_data = client_data;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
124 BLOCK_ATIMERS;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126 /* Compute the timer's expiration time. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127 switch (type)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
129 case ATIMER_ABSOLUTE:
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130 t->expiration = time;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131 break;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
132
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
133 case ATIMER_RELATIVE:
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134 EMACS_GET_TIME (t->expiration);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135 EMACS_ADD_TIME (t->expiration, t->expiration, time);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 break;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
137
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138 case ATIMER_CONTINUOUS:
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139 EMACS_GET_TIME (t->expiration);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
140 EMACS_ADD_TIME (t->expiration, t->expiration, time);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
141 t->interval = time;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
142 break;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
143 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 /* Insert the timer in the list of active atimers. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
146 schedule_atimer (t);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147 UNBLOCK_ATIMERS;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
148
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
149 /* Arrange for a SIGALRM at the time the next atimer is ripe. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 set_alarm ();
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152 return t;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
155
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 /* Cancel and free atimer TIMER. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
158 void
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159 cancel_atimer (timer)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160 struct atimer *timer;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 struct atimer *t, *prev;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
163
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164 BLOCK_ATIMERS;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
165
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
166 /* See if TIMER is active. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 for (t = atimers, prev = 0; t && t != timer; t = t->next)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168 ;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 /* If it is, take it off the list of active timers, put in on the
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 free-list. We don't bother to arrange for setting a different
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 alarm time, since a too early one doesn't hurt. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 if (t)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175 if (prev)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 prev->next = t->next;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
177 else
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 atimers = t->next;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
180 t->next = free_atimers;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 free_atimers = t;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184 UNBLOCK_ATIMERS;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
185 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
187
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
188 /* Arrange for a SIGALRM to arrive when the next timer is ripe. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
189
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
190 static void
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
191 set_alarm ()
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194 #if defined (USG) && !defined (POSIX_SIGNALS)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195 /* USG systems forget handlers when they are used;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196 must reestablish each time. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197 signal (SIGALRM, alarm_signal_handler);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 #endif /* USG */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
199
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 if (atimers)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202 EMACS_TIME now, time;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203 #ifdef HAVE_SETITIMER
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 struct itimerval it;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 #endif
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 /* Determine s/us till the next timer is ripe. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 EMACS_GET_TIME (now);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 EMACS_SUB_TIME (time, atimers->expiration, now);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211 #ifdef HAVE_SETITIMER
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212 /* Don't set the interval to 0; this disables the timer. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 if (EMACS_TIME_LE (atimers->expiration, now))
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215 EMACS_SET_SECS (time, 0);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216 EMACS_SET_USECS (time, 1000);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 bzero (&it, sizeof it);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220 it.it_value = time;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221 setitimer (ITIMER_REAL, &it, 0);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
222 #else /* not HAVE_SETITIMER */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 alarm (max (EMACS_SECS (time), 1));
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224 #endif /* not HAVE_SETITIMER */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 /* Insert timer T into the list of active atimers `atimers', keeping
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230 the list sorted by expiration time. T must not be in this list
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
231 already. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
232
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233 static void
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234 schedule_atimer (t)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
235 struct atimer *t;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
236 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
237 struct atimer *a = atimers, *prev = NULL;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 /* Look for the first atimer that is ripe after T. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240 while (a && EMACS_TIME_GT (t->expiration, a->expiration))
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 prev = a, a = a->next;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 /* Insert T in front of the atimer found, if any. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244 if (prev)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245 prev->next = t;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246 else
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247 atimers = t;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
248
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
249 t->next = a;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
250 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
251
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 /* Signal handler for SIGALRM. SIGNO is the signal number, i.e.
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
254 SIGALRM. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
255
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
256 SIGTYPE
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
257 alarm_signal_handler (signo)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
258 int signo;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
259 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260 EMACS_TIME now;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
261
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
262 EMACS_GET_TIME (now);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
263 pending_atimers = 0;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
264
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265 while (atimers
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
266 && (pending_atimers = interrupt_input_blocked) == 0
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
267 && EMACS_TIME_LE (atimers->expiration, now))
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
268 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269 struct atimer *t;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 t = atimers;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
272 atimers = atimers->next;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 t->fn (t);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275 if (t->type == ATIMER_CONTINUOUS)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 EMACS_ADD_TIME (t->expiration, now, t->interval);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278 schedule_atimer (t);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280 else
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
281 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
282 t->next = free_atimers;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
283 free_atimers = t;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
285
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
286 EMACS_GET_TIME (now);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
287 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
288
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289 #if defined (USG) && !defined (POSIX_SIGNALS)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
290 /* USG systems forget handlers when they are used;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 must reestablish each time. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 signal (SIGALRM, alarm_signal_handler);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293 #endif /* USG */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295 set_alarm ();
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
298
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
299 /* Call alarm_signal_handler for pending timers. */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
300
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
301 void
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
302 do_pending_atimers ()
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
303 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
304 if (pending_atimers)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
305 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
306 BLOCK_ATIMERS;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
307 alarm_signal_handler (SIGALRM);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
308 UNBLOCK_ATIMERS;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
309 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
310 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
311
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
312
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
313 /* Turn alarms on/off. This seems to be temporarily necessary on
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
314 some systems like HPUX (see process.c). */
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
315
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
316 void
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
317 turn_on_atimers (on)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
318 int on;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
319 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
320 if (on)
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
321 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
322 signal (SIGALRM, alarm_signal_handler);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
323 set_alarm ();
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
324 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
325 else
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
326 alarm (0);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
327 }
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
328
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
329
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
330 void
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
331 init_atimer ()
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
332 {
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
333 free_atimers = atimers = NULL;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
334 pending_atimers = 0;
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
335 signal (SIGALRM, alarm_signal_handler);
87dcc6a2c31b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
336 }