Use target_terminal_ours_for_output in warning/internal_error
[deliverable/binutils-gdb.git] / gdb / event-loop.c
CommitLineData
b5a0ac70 1/* Event loop machinery for GDB, the GNU debugger.
618f726f 2 Copyright (C) 1999-2016 Free Software Foundation, Inc.
b5a0ac70
SS
3 Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
b5a0ac70
SS
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
371d5dec 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
b5a0ac70 19
b5a0ac70 20#include "defs.h"
9e0b60a8 21#include "event-loop.h"
c2c6d25f 22#include "event-top.h"
843b20dc 23#include "queue.h"
5cc3ce8b 24#include "ser-event.h"
409a3f64 25
b5a0ac70 26#ifdef HAVE_POLL
409a3f64 27#if defined (HAVE_POLL_H)
9e0b60a8 28#include <poll.h>
409a3f64
AC
29#elif defined (HAVE_SYS_POLL_H)
30#include <sys/poll.h>
31#endif
44f45770 32#endif
409a3f64 33
9e0b60a8 34#include <sys/types.h>
438e1e42 35#include "gdb_sys_time.h"
0ea3f30e 36#include "gdb_select.h"
92bcb5f9 37#include "observer.h"
c2c6d25f 38
371d5dec
MS
39/* Tell create_file_handler what events we are interested in.
40 This is used by the select version of the event loop. */
01f69b38
DE
41
42#define GDB_READABLE (1<<1)
43#define GDB_WRITABLE (1<<2)
44#define GDB_EXCEPTION (1<<3)
45
50d01748
PA
46/* Data point to pass to the event handler. */
47typedef union event_data
48{
49 void *ptr;
50 int integer;
51} event_data;
52
c2c6d25f 53typedef struct gdb_event gdb_event;
50d01748 54typedef void (event_handler_func) (event_data);
c2c6d25f
JM
55
56/* Event for the GDB event system. Events are queued by calling
371d5dec 57 async_queue_event and serviced later on by gdb_do_one_event. An
c2c6d25f 58 event can be, for instance, a file descriptor becoming ready to be
50d01748 59 read. Servicing an event simply means that the procedure PROC will
c2c6d25f
JM
60 be called. We have 2 queues, one for file handlers that we listen
61 to in the event loop, and one for the file handlers+events that are
371d5dec 62 ready. The procedure PROC associated with each event is dependant
50d01748
PA
63 of the event source. In the case of monitored file descriptors, it
64 is always the same (handle_file_event). Its duty is to invoke the
65 handler associated with the file descriptor whose state change
66 generated the event, plus doing other cleanups and such. In the
67 case of async signal handlers, it is
68 invoke_async_signal_handler. */
c2c6d25f 69
843b20dc 70typedef struct gdb_event
c2c6d25f 71 {
50d01748
PA
72 /* Procedure to call to service this event. */
73 event_handler_func *proc;
74
75 /* Data to pass to the event handler. */
76 event_data data;
843b20dc 77 } *gdb_event_p;
c2c6d25f
JM
78
79/* Information about each file descriptor we register with the event
371d5dec 80 loop. */
c2c6d25f
JM
81
82typedef struct file_handler
83 {
371d5dec
MS
84 int fd; /* File descriptor. */
85 int mask; /* Events we want to monitor: POLLIN, etc. */
c2c6d25f 86 int ready_mask; /* Events that have been seen since
371d5dec
MS
87 the last time. */
88 handler_func *proc; /* Procedure to call when fd is ready. */
89 gdb_client_data client_data; /* Argument to pass to proc. */
90 int error; /* Was an error detected on this fd? */
91 struct file_handler *next_file; /* Next registered file descriptor. */
c2c6d25f
JM
92 }
93file_handler;
94
371d5dec 95/* PROC is a function to be invoked when the READY flag is set. This
c2c6d25f 96 happens when there has been a signal and the corresponding signal
371d5dec
MS
97 handler has 'triggered' this async_signal_handler for execution.
98 The actual work to be done in response to a signal will be carried
99 out by PROC at a later time, within process_event. This provides a
100 deferred execution of signal handlers.
101
c2c6d25f 102 Async_init_signals takes care of setting up such an
371d5dec
MS
103 async_signal_handler for each interesting signal. */
104
c2c6d25f
JM
105typedef struct async_signal_handler
106 {
371d5dec
MS
107 int ready; /* If ready, call this handler
108 from the main event loop, using
109 invoke_async_handler. */
110 struct async_signal_handler *next_handler; /* Ptr to next handler. */
111 sig_handler_func *proc; /* Function to call to do the work. */
112 gdb_client_data client_data; /* Argument to async_handler_func. */
c2c6d25f
JM
113 }
114async_signal_handler;
115
50d01748
PA
116/* PROC is a function to be invoked when the READY flag is set. This
117 happens when the event has been marked with
118 MARK_ASYNC_EVENT_HANDLER. The actual work to be done in response
119 to an event will be carried out by PROC at a later time, within
120 process_event. This provides a deferred execution of event
121 handlers. */
122typedef struct async_event_handler
123 {
124 /* If ready, call this handler from the main event loop, using
125 invoke_event_handler. */
126 int ready;
127
128 /* Point to next handler. */
129 struct async_event_handler *next_handler;
130
131 /* Function to call to do the work. */
132 async_event_handler_func *proc;
133
134 /* Argument to PROC. */
135 gdb_client_data client_data;
136 }
137async_event_handler;
138
b5a0ac70
SS
139/* Gdb_notifier is just a list of file descriptors gdb is interested in.
140 These are the input file descriptor, and the target file
371d5dec 141 descriptor. We have two flavors of the notifier, one for platforms
b5a0ac70 142 that have the POLL function, the other for those that don't, and
371d5dec 143 only support SELECT. Each of the elements in the gdb_notifier list is
b5a0ac70 144 basically a description of what kind of events gdb is interested
371d5dec 145 in, for each fd. */
b5a0ac70 146
392a587b 147/* As of 1999-04-30 only the input file descriptor is registered with the
371d5dec 148 event loop. */
b5a0ac70 149
44f45770 150/* Do we use poll or select ? */
b5a0ac70 151#ifdef HAVE_POLL
44f45770
EZ
152#define USE_POLL 1
153#else
154#define USE_POLL 0
155#endif /* HAVE_POLL */
156
157static unsigned char use_poll = USE_POLL;
b5a0ac70 158
011825f0
MM
159#ifdef USE_WIN32API
160#include <windows.h>
161#include <io.h>
162#endif
163
b5a0ac70
SS
164static struct
165 {
371d5dec 166 /* Ptr to head of file handler list. */
b5a0ac70
SS
167 file_handler *first_file_handler;
168
4e63d0ac
PA
169 /* Next file handler to handle, for the select variant. To level
170 the fairness across event sources, we serve file handlers in a
171 round-robin-like fashion. The number and order of the polled
172 file handlers may change between invocations, but this is good
173 enough. */
174 file_handler *next_file_handler;
175
44f45770 176#ifdef HAVE_POLL
371d5dec 177 /* Ptr to array of pollfd structures. */
b5a0ac70
SS
178 struct pollfd *poll_fds;
179
4e63d0ac
PA
180 /* Next file descriptor to handle, for the poll variant. To level
181 the fairness across event sources, we poll the file descriptors
182 in a round-robin-like fashion. The number and order of the
183 polled file descriptors may change between invocations, but
184 this is good enough. */
185 int next_poll_fds_index;
186
371d5dec 187 /* Timeout in milliseconds for calls to poll(). */
44f45770
EZ
188 int poll_timeout;
189#endif
b5a0ac70
SS
190
191 /* Masks to be used in the next call to select.
371d5dec 192 Bits are set in response to calls to create_file_handler. */
58a2c44a 193 fd_set check_masks[3];
b5a0ac70 194
371d5dec 195 /* What file descriptors were found ready by select. */
58a2c44a 196 fd_set ready_masks[3];
b5a0ac70 197
371d5dec
MS
198 /* Number of file descriptors to monitor (for poll). */
199 /* Number of valid bits (highest fd value + 1) (for select). */
b5a0ac70
SS
200 int num_fds;
201
371d5dec 202 /* Time structure for calls to select(). */
44f45770 203 struct timeval select_timeout;
c2c6d25f 204
371d5dec 205 /* Flag to tell whether the timeout should be used. */
c2c6d25f 206 int timeout_valid;
6426a772 207 }
b5a0ac70
SS
208gdb_notifier;
209
371d5dec
MS
210/* Structure associated with a timer. PROC will be executed at the
211 first occasion after WHEN. */
c2c6d25f
JM
212struct gdb_timer
213 {
214 struct timeval when;
215 int timer_id;
216 struct gdb_timer *next;
371d5dec
MS
217 timer_handler_func *proc; /* Function to call to do the work. */
218 gdb_client_data client_data; /* Argument to async_handler_func. */
ae462839 219 };
c2c6d25f 220
371d5dec
MS
221/* List of currently active timers. It is sorted in order of
222 increasing timers. */
c2c6d25f
JM
223static struct
224 {
371d5dec 225 /* Pointer to first in timer list. */
c2c6d25f
JM
226 struct gdb_timer *first_timer;
227
371d5dec 228 /* Id of the last timer created. */
c2c6d25f
JM
229 int num_timers;
230 }
231timer_list;
232
b5a0ac70 233/* All the async_signal_handlers gdb is interested in are kept onto
371d5dec 234 this list. */
b5a0ac70
SS
235static struct
236 {
371d5dec 237 /* Pointer to first in handler list. */
c5aa993b
JM
238 async_signal_handler *first_handler;
239
371d5dec 240 /* Pointer to last in handler list. */
c5aa993b 241 async_signal_handler *last_handler;
b5a0ac70
SS
242 }
243sighandler_list;
244
50d01748 245/* All the async_event_handlers gdb is interested in are kept onto
371d5dec 246 this list. */
50d01748
PA
247static struct
248 {
371d5dec 249 /* Pointer to first in handler list. */
50d01748
PA
250 async_event_handler *first_handler;
251
371d5dec 252 /* Pointer to last in handler list. */
50d01748
PA
253 async_event_handler *last_handler;
254 }
255async_event_handler_list;
256
257static int invoke_async_signal_handlers (void);
258static void create_file_handler (int fd, int mask, handler_func *proc,
259 gdb_client_data client_data);
70b66289 260static int check_async_event_handlers (void);
50d01748 261static int gdb_wait_for_event (int);
70b66289
PA
262static int update_wait_timeout (void);
263static int poll_timers (void);
b5a0ac70
SS
264\f
265
5cc3ce8b
PA
266/* This event is signalled whenever an asynchronous handler needs to
267 defer an action to the event loop. */
268static struct serial_event *async_signal_handlers_serial_event;
269
270/* Callback registered with ASYNC_SIGNAL_HANDLERS_SERIAL_EVENT. */
271
272static void
273async_signals_handler (int error, gdb_client_data client_data)
274{
275 /* Do nothing. Handlers are run by invoke_async_signal_handlers
276 from instead. */
277}
278
279void
280initialize_async_signal_handlers (void)
281{
282 async_signal_handlers_serial_event = make_serial_event ();
283
284 add_file_handler (serial_event_fd (async_signal_handlers_serial_event),
285 async_signals_handler, NULL);
286}
287
b5a0ac70
SS
288/* Process one high level event. If nothing is ready at this time,
289 wait for something to happen (via gdb_wait_for_event), then process
11cf8741 290 it. Returns >0 if something was done otherwise returns <0 (this
e0dd0826 291 can happen if there are no event sources to wait for). */
11cf8741 292
99656a61 293int
e0dd0826 294gdb_do_one_event (void)
b5a0ac70 295{
50d01748
PA
296 static int event_source_head = 0;
297 const int number_of_sources = 3;
298 int current = 0;
299
70b66289
PA
300 /* First let's see if there are any asynchronous signal handlers
301 that are ready. These would be the result of invoking any of the
302 signal handlers. */
303 if (invoke_async_signal_handlers ())
50d01748
PA
304 return 1;
305
306 /* To level the fairness across event sources, we poll them in a
307 round-robin fashion. */
308 for (current = 0; current < number_of_sources; current++)
11cf8741 309 {
70b66289
PA
310 int res;
311
50d01748
PA
312 switch (event_source_head)
313 {
314 case 0:
70b66289
PA
315 /* Are any timers that are ready? */
316 res = poll_timers ();
50d01748
PA
317 break;
318 case 1:
319 /* Are there events already waiting to be collected on the
320 monitored file descriptors? */
70b66289 321 res = gdb_wait_for_event (0);
50d01748
PA
322 break;
323 case 2:
324 /* Are there any asynchronous event handlers ready? */
70b66289 325 res = check_async_event_handlers ();
50d01748 326 break;
80bd5fab
PA
327 default:
328 internal_error (__FILE__, __LINE__,
329 "unexpected event_source_head %d",
330 event_source_head);
50d01748
PA
331 }
332
333 event_source_head++;
334 if (event_source_head == number_of_sources)
335 event_source_head = 0;
7e5cd2de 336
70b66289
PA
337 if (res > 0)
338 return 1;
339 }
7e5cd2de 340
50d01748
PA
341 /* Block waiting for a new event. If gdb_wait_for_event returns -1,
342 we should get out because this means that there are no event
343 sources left. This will make the event loop stop, and the
344 application exit. */
7e5cd2de 345
50d01748
PA
346 if (gdb_wait_for_event (1) < 0)
347 return -1;
7e5cd2de 348
50d01748
PA
349 /* If gdb_wait_for_event has returned 1, it means that one event has
350 been handled. We break out of the loop. */
11cf8741
JM
351 return 1;
352}
353
371d5dec
MS
354/* Start up the event loop. This is the entry point to the event loop
355 from the command loop. */
b5a0ac70 356
11cf8741
JM
357void
358start_event_loop (void)
359{
e0dd0826
PA
360 /* Loop until there is nothing to do. This is the entry point to
361 the event loop engine. gdb_do_one_event will process one event
362 for each invocation. It blocks waiting for an event and then
363 processes it. */
b5a0ac70
SS
364 while (1)
365 {
e0dd0826 366 int result = 0;
3b8630c3 367
492d29ea 368 TRY
b5a0ac70 369 {
e0dd0826
PA
370 result = gdb_do_one_event ();
371 }
492d29ea 372 CATCH (ex, RETURN_MASK_ALL)
e0dd0826
PA
373 {
374 exception_print (gdb_stderr, ex);
375
32c1e744
VP
376 /* If any exception escaped to here, we better enable
377 stdin. Otherwise, any command that calls async_disable_stdin,
378 and then throws, will leave stdin inoperable. */
712af3be 379 async_enable_stdin ();
e0dd0826
PA
380 /* If we long-jumped out of do_one_event, we probably didn't
381 get around to resetting the prompt, which leaves readline
382 in a messed-up state. Reset it here. */
92bcb5f9 383 observer_notify_command_error ();
467d8519
TT
384 /* This call looks bizarre, but it is required. If the user
385 entered a command that caused an error,
386 after_char_processing_hook won't be called from
387 rl_callback_read_char_wrapper. Using a cleanup there
388 won't work, since we want this function to be called
389 after a new prompt is printed. */
390 if (after_char_processing_hook)
391 (*after_char_processing_hook) ();
b5a0ac70 392 /* Maybe better to set a flag to be checked somewhere as to
371d5dec 393 whether display the prompt or not. */
b5a0ac70 394 }
492d29ea
PA
395 END_CATCH
396
e0dd0826
PA
397 if (result < 0)
398 break;
b5a0ac70 399 }
085dd6e6 400
371d5dec
MS
401 /* We are done with the event loop. There are no more event sources
402 to listen to. So we exit GDB. */
085dd6e6
JM
403 return;
404}
b5a0ac70
SS
405\f
406
085dd6e6
JM
407/* Wrapper function for create_file_handler, so that the caller
408 doesn't have to know implementation details about the use of poll
371d5dec 409 vs. select. */
c5aa993b 410void
6426a772 411add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
085dd6e6
JM
412{
413#ifdef HAVE_POLL
44f45770
EZ
414 struct pollfd fds;
415#endif
416
417 if (use_poll)
418 {
419#ifdef HAVE_POLL
371d5dec
MS
420 /* Check to see if poll () is usable. If not, we'll switch to
421 use select. This can happen on systems like
7e5cd2de
EZ
422 m68k-motorola-sys, `poll' cannot be used to wait for `stdin'.
423 On m68k-motorola-sysv, tty's are not stream-based and not
371d5dec 424 `poll'able. */
7e5cd2de
EZ
425 fds.fd = fd;
426 fds.events = POLLIN;
427 if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
428 use_poll = 0;
44f45770 429#else
8e65ff28 430 internal_error (__FILE__, __LINE__,
e2e0b3e5 431 _("use_poll without HAVE_POLL"));
44f45770
EZ
432#endif /* HAVE_POLL */
433 }
434 if (use_poll)
435 {
436#ifdef HAVE_POLL
437 create_file_handler (fd, POLLIN, proc, client_data);
085dd6e6 438#else
8e65ff28 439 internal_error (__FILE__, __LINE__,
e2e0b3e5 440 _("use_poll without HAVE_POLL"));
085dd6e6 441#endif
44f45770
EZ
442 }
443 else
371d5dec
MS
444 create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION,
445 proc, client_data);
085dd6e6
JM
446}
447
b5a0ac70 448/* Add a file handler/descriptor to the list of descriptors we are
371d5dec
MS
449 interested in.
450
451 FD is the file descriptor for the file/stream to be listened to.
452
453 For the poll case, MASK is a combination (OR) of POLLIN,
454 POLLRDNORM, POLLRDBAND, POLLPRI, POLLOUT, POLLWRNORM, POLLWRBAND:
455 these are the events we are interested in. If any of them occurs,
456 proc should be called.
457
458 For the select case, MASK is a combination of READABLE, WRITABLE,
459 EXCEPTION. PROC is the procedure that will be called when an event
460 occurs for FD. CLIENT_DATA is the argument to pass to PROC. */
461
085dd6e6 462static void
371d5dec
MS
463create_file_handler (int fd, int mask, handler_func * proc,
464 gdb_client_data client_data)
b5a0ac70
SS
465{
466 file_handler *file_ptr;
467
371d5dec
MS
468 /* Do we already have a file handler for this file? (We may be
469 changing its associated procedure). */
b5a0ac70
SS
470 for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
471 file_ptr = file_ptr->next_file)
472 {
473 if (file_ptr->fd == fd)
474 break;
475 }
476
371d5dec
MS
477 /* It is a new file descriptor. Add it to the list. Otherwise, just
478 change the data associated with it. */
b5a0ac70
SS
479 if (file_ptr == NULL)
480 {
8d749320 481 file_ptr = XNEW (file_handler);
b5a0ac70
SS
482 file_ptr->fd = fd;
483 file_ptr->ready_mask = 0;
484 file_ptr->next_file = gdb_notifier.first_file_handler;
485 gdb_notifier.first_file_handler = file_ptr;
b5a0ac70 486
05a6c72c
KS
487 if (use_poll)
488 {
b5a0ac70 489#ifdef HAVE_POLL
05a6c72c
KS
490 gdb_notifier.num_fds++;
491 if (gdb_notifier.poll_fds)
492 gdb_notifier.poll_fds =
493 (struct pollfd *) xrealloc (gdb_notifier.poll_fds,
494 (gdb_notifier.num_fds
495 * sizeof (struct pollfd)));
496 else
497 gdb_notifier.poll_fds =
8d749320 498 XNEW (struct pollfd);
05a6c72c
KS
499 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd;
500 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask;
501 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0;
44f45770 502#else
05a6c72c 503 internal_error (__FILE__, __LINE__,
e2e0b3e5 504 _("use_poll without HAVE_POLL"));
44f45770 505#endif /* HAVE_POLL */
05a6c72c 506 }
44f45770 507 else
05a6c72c
KS
508 {
509 if (mask & GDB_READABLE)
510 FD_SET (fd, &gdb_notifier.check_masks[0]);
511 else
512 FD_CLR (fd, &gdb_notifier.check_masks[0]);
513
514 if (mask & GDB_WRITABLE)
515 FD_SET (fd, &gdb_notifier.check_masks[1]);
516 else
517 FD_CLR (fd, &gdb_notifier.check_masks[1]);
518
519 if (mask & GDB_EXCEPTION)
520 FD_SET (fd, &gdb_notifier.check_masks[2]);
521 else
522 FD_CLR (fd, &gdb_notifier.check_masks[2]);
523
524 if (gdb_notifier.num_fds <= fd)
525 gdb_notifier.num_fds = fd + 1;
526 }
44f45770 527 }
05a6c72c
KS
528
529 file_ptr->proc = proc;
530 file_ptr->client_data = client_data;
531 file_ptr->mask = mask;
b5a0ac70
SS
532}
533
4e63d0ac
PA
534/* Return the next file handler to handle, and advance to the next
535 file handler, wrapping around if the end of the list is
536 reached. */
537
538static file_handler *
539get_next_file_handler_to_handle_and_advance (void)
540{
541 file_handler *curr_next;
542
543 /* The first time around, this is still NULL. */
544 if (gdb_notifier.next_file_handler == NULL)
545 gdb_notifier.next_file_handler = gdb_notifier.first_file_handler;
546
547 curr_next = gdb_notifier.next_file_handler;
548 gdb_assert (curr_next != NULL);
549
550 /* Advance. */
551 gdb_notifier.next_file_handler = curr_next->next_file;
552 /* Wrap around, if necessary. */
553 if (gdb_notifier.next_file_handler == NULL)
554 gdb_notifier.next_file_handler = gdb_notifier.first_file_handler;
555
556 return curr_next;
557}
558
b5a0ac70 559/* Remove the file descriptor FD from the list of monitored fd's:
371d5dec 560 i.e. we don't care anymore about events on the FD. */
b5a0ac70 561void
c2c6d25f 562delete_file_handler (int fd)
b5a0ac70
SS
563{
564 file_handler *file_ptr, *prev_ptr = NULL;
58a2c44a
EZ
565 int i;
566#ifdef HAVE_POLL
567 int j;
b5a0ac70 568 struct pollfd *new_poll_fds;
b5a0ac70
SS
569#endif
570
371d5dec 571 /* Find the entry for the given file. */
b5a0ac70
SS
572
573 for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
574 file_ptr = file_ptr->next_file)
575 {
576 if (file_ptr->fd == fd)
577 break;
578 }
579
580 if (file_ptr == NULL)
581 return;
582
44f45770
EZ
583 if (use_poll)
584 {
b5a0ac70 585#ifdef HAVE_POLL
371d5dec
MS
586 /* Create a new poll_fds array by copying every fd's information
587 but the one we want to get rid of. */
b5a0ac70 588
371d5dec
MS
589 new_poll_fds = (struct pollfd *)
590 xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
b5a0ac70 591
44f45770 592 for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
b5a0ac70 593 {
44f45770
EZ
594 if ((gdb_notifier.poll_fds + i)->fd != fd)
595 {
596 (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd;
597 (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events;
3e43a32a
MS
598 (new_poll_fds + j)->revents
599 = (gdb_notifier.poll_fds + i)->revents;
44f45770
EZ
600 j++;
601 }
b5a0ac70 602 }
b8c9b27d 603 xfree (gdb_notifier.poll_fds);
44f45770
EZ
604 gdb_notifier.poll_fds = new_poll_fds;
605 gdb_notifier.num_fds--;
606#else
8e65ff28 607 internal_error (__FILE__, __LINE__,
e2e0b3e5 608 _("use_poll without HAVE_POLL"));
44f45770 609#endif /* HAVE_POLL */
b5a0ac70 610 }
44f45770
EZ
611 else
612 {
613 if (file_ptr->mask & GDB_READABLE)
614 FD_CLR (fd, &gdb_notifier.check_masks[0]);
615 if (file_ptr->mask & GDB_WRITABLE)
616 FD_CLR (fd, &gdb_notifier.check_masks[1]);
617 if (file_ptr->mask & GDB_EXCEPTION)
618 FD_CLR (fd, &gdb_notifier.check_masks[2]);
b5a0ac70 619
371d5dec 620 /* Find current max fd. */
b5a0ac70 621
44f45770 622 if ((fd + 1) == gdb_notifier.num_fds)
b5a0ac70 623 {
44f45770
EZ
624 gdb_notifier.num_fds--;
625 for (i = gdb_notifier.num_fds; i; i--)
626 {
627 if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
628 || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
629 || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
630 break;
631 }
632 gdb_notifier.num_fds = i;
b5a0ac70
SS
633 }
634 }
b5a0ac70 635
cff3e48b 636 /* Deactivate the file descriptor, by clearing its mask,
371d5dec 637 so that it will not fire again. */
cff3e48b
JM
638
639 file_ptr->mask = 0;
640
4e63d0ac
PA
641 /* If this file handler was going to be the next one to be handled,
642 advance to the next's next, if any. */
643 if (gdb_notifier.next_file_handler == file_ptr)
644 {
645 if (file_ptr->next_file == NULL
646 && file_ptr == gdb_notifier.first_file_handler)
647 gdb_notifier.next_file_handler = NULL;
648 else
649 get_next_file_handler_to_handle_and_advance ();
650 }
651
371d5dec 652 /* Get rid of the file handler in the file handler list. */
b5a0ac70
SS
653 if (file_ptr == gdb_notifier.first_file_handler)
654 gdb_notifier.first_file_handler = file_ptr->next_file;
655 else
656 {
657 for (prev_ptr = gdb_notifier.first_file_handler;
9e0b60a8 658 prev_ptr->next_file != file_ptr;
b5a0ac70
SS
659 prev_ptr = prev_ptr->next_file)
660 ;
661 prev_ptr->next_file = file_ptr->next_file;
662 }
b8c9b27d 663 xfree (file_ptr);
b5a0ac70
SS
664}
665
666/* Handle the given event by calling the procedure associated to the
70b66289
PA
667 corresponding file handler. */
668
b5a0ac70 669static void
70b66289 670handle_file_event (file_handler *file_ptr, int ready_mask)
b5a0ac70 671{
c2c6d25f
JM
672 int mask;
673#ifdef HAVE_POLL
674 int error_mask;
c2c6d25f 675#endif
b5a0ac70 676
b5a0ac70 677 {
b5a0ac70
SS
678 {
679 /* With poll, the ready_mask could have any of three events
371d5dec
MS
680 set to 1: POLLHUP, POLLERR, POLLNVAL. These events
681 cannot be used in the requested event mask (events), but
682 they can be returned in the return mask (revents). We
683 need to check for those event too, and add them to the
684 mask which will be passed to the handler. */
b5a0ac70
SS
685
686 /* See if the desired events (mask) match the received
371d5dec 687 events (ready_mask). */
b5a0ac70 688
44f45770 689 if (use_poll)
c2c6d25f 690 {
44f45770 691#ifdef HAVE_POLL
652c71b4
AS
692 /* POLLHUP means EOF, but can be combined with POLLIN to
693 signal more data to read. */
44f45770 694 error_mask = POLLHUP | POLLERR | POLLNVAL;
70b66289 695 mask = ready_mask & (file_ptr->mask | error_mask);
44f45770 696
652c71b4 697 if ((mask & (POLLERR | POLLNVAL)) != 0)
44f45770 698 {
371d5dec
MS
699 /* Work in progress. We may need to tell somebody
700 what kind of error we had. */
652c71b4 701 if (mask & POLLERR)
3e43a32a
MS
702 printf_unfiltered (_("Error detected on fd %d\n"),
703 file_ptr->fd);
652c71b4 704 if (mask & POLLNVAL)
3e43a32a
MS
705 printf_unfiltered (_("Invalid or non-`poll'able fd %d\n"),
706 file_ptr->fd);
44f45770
EZ
707 file_ptr->error = 1;
708 }
709 else
710 file_ptr->error = 0;
711#else
8e65ff28 712 internal_error (__FILE__, __LINE__,
e2e0b3e5 713 _("use_poll without HAVE_POLL"));
44f45770 714#endif /* HAVE_POLL */
6426a772
JM
715 }
716 else
c2c6d25f 717 {
70b66289 718 if (ready_mask & GDB_EXCEPTION)
44f45770 719 {
3e43a32a
MS
720 printf_unfiltered (_("Exception condition detected "
721 "on fd %d\n"), file_ptr->fd);
44f45770
EZ
722 file_ptr->error = 1;
723 }
724 else
725 file_ptr->error = 0;
70b66289 726 mask = ready_mask & file_ptr->mask;
c2c6d25f 727 }
b5a0ac70 728
371d5dec 729 /* If there was a match, then call the handler. */
b5a0ac70 730 if (mask != 0)
2acceee2 731 (*file_ptr->proc) (file_ptr->error, file_ptr->client_data);
b5a0ac70
SS
732 }
733 }
734}
735
70b66289
PA
736/* Wait for new events on the monitored file descriptors. Run the
737 event handler if the first descriptor that is detected by the poll.
738 If BLOCK and if there are no events, this function will block in
739 the call to poll. Return 1 if an event was handled. Return -1 if
740 there are no file descriptors to monitor. Return 1 if an event was
741 handled, otherwise returns 0. */
742
b5a0ac70 743static int
50d01748 744gdb_wait_for_event (int block)
b5a0ac70
SS
745{
746 file_handler *file_ptr;
0f71a2f6 747 int num_found = 0;
b5a0ac70 748
371d5dec 749 /* Make sure all output is done before getting another event. */
7be570e7
JM
750 gdb_flush (gdb_stdout);
751 gdb_flush (gdb_stderr);
752
b5a0ac70
SS
753 if (gdb_notifier.num_fds == 0)
754 return -1;
755
70b66289
PA
756 if (block)
757 update_wait_timeout ();
758
44f45770
EZ
759 if (use_poll)
760 {
b5a0ac70 761#ifdef HAVE_POLL
50d01748
PA
762 int timeout;
763
764 if (block)
765 timeout = gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1;
766 else
767 timeout = 0;
768
769 num_found = poll (gdb_notifier.poll_fds,
770 (unsigned long) gdb_notifier.num_fds, timeout);
44f45770
EZ
771
772 /* Don't print anything if we get out of poll because of a
50d01748 773 signal. */
44f45770 774 if (num_found == -1 && errno != EINTR)
e2e0b3e5 775 perror_with_name (("poll"));
44f45770 776#else
8e65ff28 777 internal_error (__FILE__, __LINE__,
e2e0b3e5 778 _("use_poll without HAVE_POLL"));
44f45770
EZ
779#endif /* HAVE_POLL */
780 }
781 else
c2c6d25f 782 {
50d01748 783 struct timeval select_timeout;
50d01748 784 struct timeval *timeout_p;
d7f9d729 785
50d01748
PA
786 if (block)
787 timeout_p = gdb_notifier.timeout_valid
788 ? &gdb_notifier.select_timeout : NULL;
789 else
790 {
791 memset (&select_timeout, 0, sizeof (select_timeout));
792 timeout_p = &select_timeout;
793 }
794
44f45770
EZ
795 gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
796 gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
797 gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
011825f0
MM
798 num_found = gdb_select (gdb_notifier.num_fds,
799 &gdb_notifier.ready_masks[0],
800 &gdb_notifier.ready_masks[1],
801 &gdb_notifier.ready_masks[2],
50d01748 802 timeout_p);
44f45770 803
371d5dec 804 /* Clear the masks after an error from select. */
44f45770
EZ
805 if (num_found == -1)
806 {
807 FD_ZERO (&gdb_notifier.ready_masks[0]);
808 FD_ZERO (&gdb_notifier.ready_masks[1]);
809 FD_ZERO (&gdb_notifier.ready_masks[2]);
50d01748
PA
810
811 /* Dont print anything if we got a signal, let gdb handle
812 it. */
44f45770 813 if (errno != EINTR)
e2e0b3e5 814 perror_with_name (("select"));
44f45770 815 }
c2c6d25f 816 }
b5a0ac70 817
4e63d0ac
PA
818 /* Avoid looking at poll_fds[i]->revents if no event fired. */
819 if (num_found <= 0)
820 return 0;
821
70b66289
PA
822 /* Run event handlers. We always run just one handler and go back
823 to polling, in case a handler changes the notifier list. Since
824 events for sources we haven't consumed yet wake poll/select
825 immediately, no event is lost. */
b5a0ac70 826
4e63d0ac
PA
827 /* To level the fairness across event descriptors, we handle them in
828 a round-robin-like fashion. The number and order of descriptors
829 may change between invocations, but this is good enough. */
44f45770
EZ
830 if (use_poll)
831 {
b5a0ac70 832#ifdef HAVE_POLL
4e63d0ac
PA
833 int i;
834 int mask;
b5a0ac70 835
4e63d0ac
PA
836 while (1)
837 {
838 if (gdb_notifier.next_poll_fds_index >= gdb_notifier.num_fds)
839 gdb_notifier.next_poll_fds_index = 0;
840 i = gdb_notifier.next_poll_fds_index++;
44f45770 841
4e63d0ac
PA
842 gdb_assert (i < gdb_notifier.num_fds);
843 if ((gdb_notifier.poll_fds + i)->revents)
844 break;
845 }
70b66289 846
4e63d0ac
PA
847 for (file_ptr = gdb_notifier.first_file_handler;
848 file_ptr != NULL;
849 file_ptr = file_ptr->next_file)
850 {
851 if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd)
852 break;
44f45770 853 }
4e63d0ac
PA
854 gdb_assert (file_ptr != NULL);
855
856 mask = (gdb_notifier.poll_fds + i)->revents;
857 handle_file_event (file_ptr, mask);
858 return 1;
44f45770 859#else
8e65ff28 860 internal_error (__FILE__, __LINE__,
e2e0b3e5 861 _("use_poll without HAVE_POLL"));
44f45770
EZ
862#endif /* HAVE_POLL */
863 }
864 else
865 {
4e63d0ac
PA
866 /* See comment about even source fairness above. */
867 int mask = 0;
868
869 do
b5a0ac70 870 {
4e63d0ac 871 file_ptr = get_next_file_handler_to_handle_and_advance ();
44f45770
EZ
872
873 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
874 mask |= GDB_READABLE;
875 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
876 mask |= GDB_WRITABLE;
877 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
878 mask |= GDB_EXCEPTION;
b5a0ac70 879 }
4e63d0ac
PA
880 while (mask == 0);
881
882 handle_file_event (file_ptr, mask);
883 return 1;
b5a0ac70 884 }
b5a0ac70
SS
885 return 0;
886}
887\f
888
371d5dec 889/* Create an asynchronous handler, allocating memory for it.
b5a0ac70
SS
890 Return a pointer to the newly created handler.
891 This pointer will be used to invoke the handler by
892 invoke_async_signal_handler.
893 PROC is the function to call with CLIENT_DATA argument
371d5dec 894 whenever the handler is invoked. */
b5a0ac70 895async_signal_handler *
3e43a32a
MS
896create_async_signal_handler (sig_handler_func * proc,
897 gdb_client_data client_data)
b5a0ac70
SS
898{
899 async_signal_handler *async_handler_ptr;
900
8d749320 901 async_handler_ptr = XNEW (async_signal_handler);
b5a0ac70
SS
902 async_handler_ptr->ready = 0;
903 async_handler_ptr->next_handler = NULL;
904 async_handler_ptr->proc = proc;
905 async_handler_ptr->client_data = client_data;
906 if (sighandler_list.first_handler == NULL)
907 sighandler_list.first_handler = async_handler_ptr;
908 else
909 sighandler_list.last_handler->next_handler = async_handler_ptr;
910 sighandler_list.last_handler = async_handler_ptr;
911 return async_handler_ptr;
912}
913
b803fb0f
DJ
914/* Call the handler from HANDLER immediately. This function runs
915 signal handlers when returning to the event loop would be too
916 slow. */
917void
918call_async_signal_handler (struct async_signal_handler *handler)
919{
920 (*handler->proc) (handler->client_data);
921}
922
371d5dec
MS
923/* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information
924 will be used when the handlers are invoked, after we have waited
925 for some event. The caller of this function is the interrupt
926 handler associated with a signal. */
b5a0ac70 927void
6426a772 928mark_async_signal_handler (async_signal_handler * async_handler_ptr)
b5a0ac70 929{
50d01748 930 async_handler_ptr->ready = 1;
5cc3ce8b 931 serial_event_set (async_signal_handlers_serial_event);
b5a0ac70
SS
932}
933
abc56d60
PA
934/* See event-loop.h. */
935
936void
937clear_async_signal_handler (async_signal_handler *async_handler_ptr)
938{
939 async_handler_ptr->ready = 0;
940}
941
942/* See event-loop.h. */
943
944int
945async_signal_handler_is_marked (async_signal_handler *async_handler_ptr)
946{
947 return async_handler_ptr->ready;
948}
949
50d01748
PA
950/* Call all the handlers that are ready. Returns true if any was
951 indeed ready. */
5cc3ce8b 952
50d01748
PA
953static int
954invoke_async_signal_handlers (void)
b5a0ac70
SS
955{
956 async_signal_handler *async_handler_ptr;
50d01748 957 int any_ready = 0;
b5a0ac70 958
5cc3ce8b
PA
959 /* We're going to handle all pending signals, so no need to wake up
960 the event loop again the next time around. Note this must be
961 cleared _before_ calling the callbacks, to avoid races. */
962 serial_event_clear (async_signal_handlers_serial_event);
963
964 /* Invoke all ready handlers. */
b5a0ac70
SS
965
966 while (1)
967 {
c5aa993b 968 for (async_handler_ptr = sighandler_list.first_handler;
b5a0ac70
SS
969 async_handler_ptr != NULL;
970 async_handler_ptr = async_handler_ptr->next_handler)
971 {
972 if (async_handler_ptr->ready)
973 break;
974 }
975 if (async_handler_ptr == NULL)
976 break;
50d01748 977 any_ready = 1;
b5a0ac70
SS
978 async_handler_ptr->ready = 0;
979 (*async_handler_ptr->proc) (async_handler_ptr->client_data);
980 }
981
50d01748 982 return any_ready;
b5a0ac70
SS
983}
984
371d5dec 985/* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
b5a0ac70
SS
986 Free the space allocated for it. */
987void
6426a772 988delete_async_signal_handler (async_signal_handler ** async_handler_ptr)
b5a0ac70
SS
989{
990 async_signal_handler *prev_ptr;
991
43ff13b4 992 if (sighandler_list.first_handler == (*async_handler_ptr))
b5a0ac70 993 {
43ff13b4 994 sighandler_list.first_handler = (*async_handler_ptr)->next_handler;
b5a0ac70
SS
995 if (sighandler_list.first_handler == NULL)
996 sighandler_list.last_handler = NULL;
997 }
998 else
999 {
1000 prev_ptr = sighandler_list.first_handler;
32107cd5 1001 while (prev_ptr && prev_ptr->next_handler != (*async_handler_ptr))
b5a0ac70 1002 prev_ptr = prev_ptr->next_handler;
60bc018f 1003 gdb_assert (prev_ptr);
43ff13b4
JM
1004 prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1005 if (sighandler_list.last_handler == (*async_handler_ptr))
b5a0ac70
SS
1006 sighandler_list.last_handler = prev_ptr;
1007 }
b8c9b27d 1008 xfree ((*async_handler_ptr));
43ff13b4 1009 (*async_handler_ptr) = NULL;
b5a0ac70
SS
1010}
1011
50d01748
PA
1012/* Create an asynchronous event handler, allocating memory for it.
1013 Return a pointer to the newly created handler. PROC is the
1014 function to call with CLIENT_DATA argument whenever the handler is
1015 invoked. */
1016async_event_handler *
1017create_async_event_handler (async_event_handler_func *proc,
1018 gdb_client_data client_data)
1019{
1020 async_event_handler *h;
1021
8d749320 1022 h = XNEW (struct async_event_handler);
50d01748
PA
1023 h->ready = 0;
1024 h->next_handler = NULL;
1025 h->proc = proc;
1026 h->client_data = client_data;
1027 if (async_event_handler_list.first_handler == NULL)
1028 async_event_handler_list.first_handler = h;
1029 else
1030 async_event_handler_list.last_handler->next_handler = h;
1031 async_event_handler_list.last_handler = h;
1032 return h;
1033}
1034
1035/* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information
1036 will be used by gdb_do_one_event. The caller will be whoever
1037 created the event source, and wants to signal that the event is
1038 ready to be handled. */
1039void
1040mark_async_event_handler (async_event_handler *async_handler_ptr)
1041{
1042 async_handler_ptr->ready = 1;
1043}
1044
b7d2e916
PA
1045/* See event-loop.h. */
1046
1047void
1048clear_async_event_handler (async_event_handler *async_handler_ptr)
1049{
1050 async_handler_ptr->ready = 0;
1051}
1052
70b66289
PA
1053/* Check if asynchronous event handlers are ready, and call the
1054 handler function for one that is. */
50d01748 1055
70b66289 1056static int
50d01748
PA
1057check_async_event_handlers (void)
1058{
1059 async_event_handler *async_handler_ptr;
50d01748
PA
1060
1061 for (async_handler_ptr = async_event_handler_list.first_handler;
1062 async_handler_ptr != NULL;
1063 async_handler_ptr = async_handler_ptr->next_handler)
1064 {
1065 if (async_handler_ptr->ready)
1066 {
1067 async_handler_ptr->ready = 0;
70b66289
PA
1068 (*async_handler_ptr->proc) (async_handler_ptr->client_data);
1069 return 1;
50d01748
PA
1070 }
1071 }
70b66289
PA
1072
1073 return 0;
50d01748
PA
1074}
1075
1076/* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
1077 Free the space allocated for it. */
1078void
1079delete_async_event_handler (async_event_handler **async_handler_ptr)
b5a0ac70 1080{
50d01748
PA
1081 async_event_handler *prev_ptr;
1082
1083 if (async_event_handler_list.first_handler == *async_handler_ptr)
1084 {
3e43a32a
MS
1085 async_event_handler_list.first_handler
1086 = (*async_handler_ptr)->next_handler;
50d01748
PA
1087 if (async_event_handler_list.first_handler == NULL)
1088 async_event_handler_list.last_handler = NULL;
1089 }
1090 else
1091 {
1092 prev_ptr = async_event_handler_list.first_handler;
1093 while (prev_ptr && prev_ptr->next_handler != *async_handler_ptr)
1094 prev_ptr = prev_ptr->next_handler;
60bc018f 1095 gdb_assert (prev_ptr);
50d01748
PA
1096 prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1097 if (async_event_handler_list.last_handler == (*async_handler_ptr))
1098 async_event_handler_list.last_handler = prev_ptr;
1099 }
1100 xfree (*async_handler_ptr);
1101 *async_handler_ptr = NULL;
b5a0ac70 1102}
c2c6d25f 1103
371d5dec
MS
1104/* Create a timer that will expire in MILLISECONDS from now. When the
1105 timer is ready, PROC will be executed. At creation, the timer is
c2c6d25f 1106 aded to the timers queue. This queue is kept sorted in order of
371d5dec 1107 increasing timers. Return a handle to the timer struct. */
c2c6d25f 1108int
371d5dec
MS
1109create_timer (int milliseconds, timer_handler_func * proc,
1110 gdb_client_data client_data)
c2c6d25f
JM
1111{
1112 struct gdb_timer *timer_ptr, *timer_index, *prev_timer;
1113 struct timeval time_now, delta;
1114
371d5dec 1115 /* Compute seconds. */
c2c6d25f 1116 delta.tv_sec = milliseconds / 1000;
371d5dec 1117 /* Compute microseconds. */
6426a772
JM
1118 delta.tv_usec = (milliseconds % 1000) * 1000;
1119
c2c6d25f
JM
1120 gettimeofday (&time_now, NULL);
1121
8d749320 1122 timer_ptr = XNEW (struct gdb_timer);
c2c6d25f
JM
1123 timer_ptr->when.tv_sec = time_now.tv_sec + delta.tv_sec;
1124 timer_ptr->when.tv_usec = time_now.tv_usec + delta.tv_usec;
371d5dec 1125 /* Carry? */
6426a772 1126 if (timer_ptr->when.tv_usec >= 1000000)
c2c6d25f
JM
1127 {
1128 timer_ptr->when.tv_sec += 1;
1129 timer_ptr->when.tv_usec -= 1000000;
1130 }
1131 timer_ptr->proc = proc;
1132 timer_ptr->client_data = client_data;
6426a772 1133 timer_list.num_timers++;
c2c6d25f
JM
1134 timer_ptr->timer_id = timer_list.num_timers;
1135
1136 /* Now add the timer to the timer queue, making sure it is sorted in
371d5dec 1137 increasing order of expiration. */
c2c6d25f 1138
6426a772
JM
1139 for (timer_index = timer_list.first_timer;
1140 timer_index != NULL;
c2c6d25f
JM
1141 timer_index = timer_index->next)
1142 {
1143 /* If the seconds field is greater or if it is the same, but the
371d5dec 1144 microsecond field is greater. */
905e0470
PM
1145 if ((timer_index->when.tv_sec > timer_ptr->when.tv_sec)
1146 || ((timer_index->when.tv_sec == timer_ptr->when.tv_sec)
1147 && (timer_index->when.tv_usec > timer_ptr->when.tv_usec)))
c2c6d25f
JM
1148 break;
1149 }
6426a772 1150
c2c6d25f
JM
1151 if (timer_index == timer_list.first_timer)
1152 {
1153 timer_ptr->next = timer_list.first_timer;
1154 timer_list.first_timer = timer_ptr;
1155
1156 }
1157 else
1158 {
6426a772
JM
1159 for (prev_timer = timer_list.first_timer;
1160 prev_timer->next != timer_index;
c2c6d25f
JM
1161 prev_timer = prev_timer->next)
1162 ;
6426a772 1163
c2c6d25f
JM
1164 prev_timer->next = timer_ptr;
1165 timer_ptr->next = timer_index;
1166 }
1167
1168 gdb_notifier.timeout_valid = 0;
1169 return timer_ptr->timer_id;
1170}
1171
1172/* There is a chance that the creator of the timer wants to get rid of
371d5dec 1173 it before it expires. */
c2c6d25f
JM
1174void
1175delete_timer (int id)
1176{
1177 struct gdb_timer *timer_ptr, *prev_timer = NULL;
1178
371d5dec 1179 /* Find the entry for the given timer. */
c2c6d25f
JM
1180
1181 for (timer_ptr = timer_list.first_timer; timer_ptr != NULL;
1182 timer_ptr = timer_ptr->next)
1183 {
1184 if (timer_ptr->timer_id == id)
1185 break;
1186 }
1187
1188 if (timer_ptr == NULL)
1189 return;
371d5dec 1190 /* Get rid of the timer in the timer list. */
c2c6d25f
JM
1191 if (timer_ptr == timer_list.first_timer)
1192 timer_list.first_timer = timer_ptr->next;
1193 else
1194 {
1195 for (prev_timer = timer_list.first_timer;
1196 prev_timer->next != timer_ptr;
1197 prev_timer = prev_timer->next)
1198 ;
1199 prev_timer->next = timer_ptr->next;
1200 }
b8c9b27d 1201 xfree (timer_ptr);
c2c6d25f
JM
1202
1203 gdb_notifier.timeout_valid = 0;
1204}
1205
70b66289
PA
1206/* Update the timeout for the select() or poll(). Returns true if the
1207 timer has already expired, false otherwise. */
6426a772 1208
70b66289
PA
1209static int
1210update_wait_timeout (void)
c2c6d25f
JM
1211{
1212 struct timeval time_now, delta;
6426a772 1213
2acceee2 1214 if (timer_list.first_timer != NULL)
c2c6d25f
JM
1215 {
1216 gettimeofday (&time_now, NULL);
1217 delta.tv_sec = timer_list.first_timer->when.tv_sec - time_now.tv_sec;
1218 delta.tv_usec = timer_list.first_timer->when.tv_usec - time_now.tv_usec;
371d5dec 1219 /* Borrow? */
c2c6d25f
JM
1220 if (delta.tv_usec < 0)
1221 {
1222 delta.tv_sec -= 1;
1223 delta.tv_usec += 1000000;
1224 }
6426a772 1225
70b66289
PA
1226 /* Cannot simply test if delta.tv_sec is negative because time_t
1227 might be unsigned. */
2f16bb32
EZ
1228 if (timer_list.first_timer->when.tv_sec < time_now.tv_sec
1229 || (timer_list.first_timer->when.tv_sec == time_now.tv_sec
1230 && timer_list.first_timer->when.tv_usec < time_now.tv_usec))
c2c6d25f 1231 {
70b66289 1232 /* It expired already. */
c2c6d25f
JM
1233 delta.tv_sec = 0;
1234 delta.tv_usec = 0;
1235 }
1236
70b66289 1237 /* Update the timeout for select/ poll. */
44f45770
EZ
1238 if (use_poll)
1239 {
c2c6d25f 1240#ifdef HAVE_POLL
44f45770 1241 gdb_notifier.poll_timeout = delta.tv_sec * 1000;
c2c6d25f 1242#else
8e65ff28 1243 internal_error (__FILE__, __LINE__,
e2e0b3e5 1244 _("use_poll without HAVE_POLL"));
44f45770
EZ
1245#endif /* HAVE_POLL */
1246 }
1247 else
1248 {
1249 gdb_notifier.select_timeout.tv_sec = delta.tv_sec;
1250 gdb_notifier.select_timeout.tv_usec = delta.tv_usec;
1251 }
c2c6d25f 1252 gdb_notifier.timeout_valid = 1;
70b66289
PA
1253
1254 if (delta.tv_sec == 0 && delta.tv_usec == 0)
1255 return 1;
c2c6d25f 1256 }
6426a772 1257 else
c2c6d25f 1258 gdb_notifier.timeout_valid = 0;
70b66289
PA
1259
1260 return 0;
1261}
1262
1263/* Check whether a timer in the timers queue is ready. If a timer is
1264 ready, call its handler and return. Update the timeout for the
1265 select() or poll() as well. Return 1 if an event was handled,
1266 otherwise returns 0.*/
1267
1268static int
1269poll_timers (void)
1270{
1271 if (update_wait_timeout ())
1272 {
1273 struct gdb_timer *timer_ptr = timer_list.first_timer;
1274 timer_handler_func *proc = timer_ptr->proc;
1275 gdb_client_data client_data = timer_ptr->client_data;
1276
1277 /* Get rid of the timer from the beginning of the list. */
1278 timer_list.first_timer = timer_ptr->next;
1279
1280 /* Delete the timer before calling the callback, not after, in
1281 case the callback itself decides to try deleting the timer
1282 too. */
1283 xfree (timer_ptr);
1284
1285 /* Call the procedure associated with that timer. */
1286 (proc) (client_data);
1287
1288 return 1;
1289 }
1290
1291 return 0;
c2c6d25f 1292}
This page took 1.16821 seconds and 4 git commands to generate.