]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/event-loop.c
Fix signal handler/event-loop races
[thirdparty/binutils-gdb.git] / gdb / event-loop.c
1 /* Event loop machinery for GDB, the GNU debugger.
2 Copyright (C) 1999-2016 Free Software Foundation, Inc.
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
9 the Free Software Foundation; either version 3 of the License, or
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
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "event-loop.h"
22 #include "event-top.h"
23 #include "queue.h"
24 #include "ser-event.h"
25
26 #ifdef HAVE_POLL
27 #if defined (HAVE_POLL_H)
28 #include <poll.h>
29 #elif defined (HAVE_SYS_POLL_H)
30 #include <sys/poll.h>
31 #endif
32 #endif
33
34 #include <sys/types.h>
35 #include "gdb_sys_time.h"
36 #include "gdb_select.h"
37 #include "observer.h"
38
39 /* Tell create_file_handler what events we are interested in.
40 This is used by the select version of the event loop. */
41
42 #define GDB_READABLE (1<<1)
43 #define GDB_WRITABLE (1<<2)
44 #define GDB_EXCEPTION (1<<3)
45
46 /* Data point to pass to the event handler. */
47 typedef union event_data
48 {
49 void *ptr;
50 int integer;
51 } event_data;
52
53 typedef struct gdb_event gdb_event;
54 typedef void (event_handler_func) (event_data);
55
56 /* Event for the GDB event system. Events are queued by calling
57 async_queue_event and serviced later on by gdb_do_one_event. An
58 event can be, for instance, a file descriptor becoming ready to be
59 read. Servicing an event simply means that the procedure PROC will
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
62 ready. The procedure PROC associated with each event is dependant
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. */
69
70 typedef struct gdb_event
71 {
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;
77 } *gdb_event_p;
78
79 /* Information about each file descriptor we register with the event
80 loop. */
81
82 typedef struct file_handler
83 {
84 int fd; /* File descriptor. */
85 int mask; /* Events we want to monitor: POLLIN, etc. */
86 int ready_mask; /* Events that have been seen since
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. */
92 }
93 file_handler;
94
95 /* PROC is a function to be invoked when the READY flag is set. This
96 happens when there has been a signal and the corresponding signal
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
102 Async_init_signals takes care of setting up such an
103 async_signal_handler for each interesting signal. */
104
105 typedef struct async_signal_handler
106 {
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. */
113 }
114 async_signal_handler;
115
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. */
122 typedef 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 }
137 async_event_handler;
138
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
141 descriptor. We have two flavors of the notifier, one for platforms
142 that have the POLL function, the other for those that don't, and
143 only support SELECT. Each of the elements in the gdb_notifier list is
144 basically a description of what kind of events gdb is interested
145 in, for each fd. */
146
147 /* As of 1999-04-30 only the input file descriptor is registered with the
148 event loop. */
149
150 /* Do we use poll or select ? */
151 #ifdef HAVE_POLL
152 #define USE_POLL 1
153 #else
154 #define USE_POLL 0
155 #endif /* HAVE_POLL */
156
157 static unsigned char use_poll = USE_POLL;
158
159 #ifdef USE_WIN32API
160 #include <windows.h>
161 #include <io.h>
162 #endif
163
164 static struct
165 {
166 /* Ptr to head of file handler list. */
167 file_handler *first_file_handler;
168
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
176 #ifdef HAVE_POLL
177 /* Ptr to array of pollfd structures. */
178 struct pollfd *poll_fds;
179
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
187 /* Timeout in milliseconds for calls to poll(). */
188 int poll_timeout;
189 #endif
190
191 /* Masks to be used in the next call to select.
192 Bits are set in response to calls to create_file_handler. */
193 fd_set check_masks[3];
194
195 /* What file descriptors were found ready by select. */
196 fd_set ready_masks[3];
197
198 /* Number of file descriptors to monitor (for poll). */
199 /* Number of valid bits (highest fd value + 1) (for select). */
200 int num_fds;
201
202 /* Time structure for calls to select(). */
203 struct timeval select_timeout;
204
205 /* Flag to tell whether the timeout should be used. */
206 int timeout_valid;
207 }
208 gdb_notifier;
209
210 /* Structure associated with a timer. PROC will be executed at the
211 first occasion after WHEN. */
212 struct gdb_timer
213 {
214 struct timeval when;
215 int timer_id;
216 struct gdb_timer *next;
217 timer_handler_func *proc; /* Function to call to do the work. */
218 gdb_client_data client_data; /* Argument to async_handler_func. */
219 };
220
221 /* List of currently active timers. It is sorted in order of
222 increasing timers. */
223 static struct
224 {
225 /* Pointer to first in timer list. */
226 struct gdb_timer *first_timer;
227
228 /* Id of the last timer created. */
229 int num_timers;
230 }
231 timer_list;
232
233 /* All the async_signal_handlers gdb is interested in are kept onto
234 this list. */
235 static struct
236 {
237 /* Pointer to first in handler list. */
238 async_signal_handler *first_handler;
239
240 /* Pointer to last in handler list. */
241 async_signal_handler *last_handler;
242 }
243 sighandler_list;
244
245 /* All the async_event_handlers gdb is interested in are kept onto
246 this list. */
247 static struct
248 {
249 /* Pointer to first in handler list. */
250 async_event_handler *first_handler;
251
252 /* Pointer to last in handler list. */
253 async_event_handler *last_handler;
254 }
255 async_event_handler_list;
256
257 static int invoke_async_signal_handlers (void);
258 static void create_file_handler (int fd, int mask, handler_func *proc,
259 gdb_client_data client_data);
260 static int check_async_event_handlers (void);
261 static int gdb_wait_for_event (int);
262 static int update_wait_timeout (void);
263 static int poll_timers (void);
264 \f
265
266 /* This event is signalled whenever an asynchronous handler needs to
267 defer an action to the event loop. */
268 static struct serial_event *async_signal_handlers_serial_event;
269
270 /* Callback registered with ASYNC_SIGNAL_HANDLERS_SERIAL_EVENT. */
271
272 static void
273 async_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
279 void
280 initialize_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
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
290 it. Returns >0 if something was done otherwise returns <0 (this
291 can happen if there are no event sources to wait for). */
292
293 int
294 gdb_do_one_event (void)
295 {
296 static int event_source_head = 0;
297 const int number_of_sources = 3;
298 int current = 0;
299
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 ())
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++)
309 {
310 int res;
311
312 switch (event_source_head)
313 {
314 case 0:
315 /* Are any timers that are ready? */
316 res = poll_timers ();
317 break;
318 case 1:
319 /* Are there events already waiting to be collected on the
320 monitored file descriptors? */
321 res = gdb_wait_for_event (0);
322 break;
323 case 2:
324 /* Are there any asynchronous event handlers ready? */
325 res = check_async_event_handlers ();
326 break;
327 default:
328 internal_error (__FILE__, __LINE__,
329 "unexpected event_source_head %d",
330 event_source_head);
331 }
332
333 event_source_head++;
334 if (event_source_head == number_of_sources)
335 event_source_head = 0;
336
337 if (res > 0)
338 return 1;
339 }
340
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. */
345
346 if (gdb_wait_for_event (1) < 0)
347 return -1;
348
349 /* If gdb_wait_for_event has returned 1, it means that one event has
350 been handled. We break out of the loop. */
351 return 1;
352 }
353
354 /* Start up the event loop. This is the entry point to the event loop
355 from the command loop. */
356
357 void
358 start_event_loop (void)
359 {
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. */
364 while (1)
365 {
366 int result = 0;
367
368 TRY
369 {
370 result = gdb_do_one_event ();
371 }
372 CATCH (ex, RETURN_MASK_ALL)
373 {
374 exception_print (gdb_stderr, ex);
375
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. */
379 async_enable_stdin ();
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. */
383 observer_notify_command_error ();
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) ();
392 /* Maybe better to set a flag to be checked somewhere as to
393 whether display the prompt or not. */
394 }
395 END_CATCH
396
397 if (result < 0)
398 break;
399 }
400
401 /* We are done with the event loop. There are no more event sources
402 to listen to. So we exit GDB. */
403 return;
404 }
405 \f
406
407 /* Wrapper function for create_file_handler, so that the caller
408 doesn't have to know implementation details about the use of poll
409 vs. select. */
410 void
411 add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
412 {
413 #ifdef HAVE_POLL
414 struct pollfd fds;
415 #endif
416
417 if (use_poll)
418 {
419 #ifdef HAVE_POLL
420 /* Check to see if poll () is usable. If not, we'll switch to
421 use select. This can happen on systems like
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
424 `poll'able. */
425 fds.fd = fd;
426 fds.events = POLLIN;
427 if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
428 use_poll = 0;
429 #else
430 internal_error (__FILE__, __LINE__,
431 _("use_poll without HAVE_POLL"));
432 #endif /* HAVE_POLL */
433 }
434 if (use_poll)
435 {
436 #ifdef HAVE_POLL
437 create_file_handler (fd, POLLIN, proc, client_data);
438 #else
439 internal_error (__FILE__, __LINE__,
440 _("use_poll without HAVE_POLL"));
441 #endif
442 }
443 else
444 create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION,
445 proc, client_data);
446 }
447
448 /* Add a file handler/descriptor to the list of descriptors we are
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
462 static void
463 create_file_handler (int fd, int mask, handler_func * proc,
464 gdb_client_data client_data)
465 {
466 file_handler *file_ptr;
467
468 /* Do we already have a file handler for this file? (We may be
469 changing its associated procedure). */
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
477 /* It is a new file descriptor. Add it to the list. Otherwise, just
478 change the data associated with it. */
479 if (file_ptr == NULL)
480 {
481 file_ptr = XNEW (file_handler);
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;
486
487 if (use_poll)
488 {
489 #ifdef HAVE_POLL
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 =
498 XNEW (struct pollfd);
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;
502 #else
503 internal_error (__FILE__, __LINE__,
504 _("use_poll without HAVE_POLL"));
505 #endif /* HAVE_POLL */
506 }
507 else
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 }
527 }
528
529 file_ptr->proc = proc;
530 file_ptr->client_data = client_data;
531 file_ptr->mask = mask;
532 }
533
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
538 static file_handler *
539 get_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
559 /* Remove the file descriptor FD from the list of monitored fd's:
560 i.e. we don't care anymore about events on the FD. */
561 void
562 delete_file_handler (int fd)
563 {
564 file_handler *file_ptr, *prev_ptr = NULL;
565 int i;
566 #ifdef HAVE_POLL
567 int j;
568 struct pollfd *new_poll_fds;
569 #endif
570
571 /* Find the entry for the given file. */
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
583 if (use_poll)
584 {
585 #ifdef HAVE_POLL
586 /* Create a new poll_fds array by copying every fd's information
587 but the one we want to get rid of. */
588
589 new_poll_fds = (struct pollfd *)
590 xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
591
592 for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
593 {
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;
598 (new_poll_fds + j)->revents
599 = (gdb_notifier.poll_fds + i)->revents;
600 j++;
601 }
602 }
603 xfree (gdb_notifier.poll_fds);
604 gdb_notifier.poll_fds = new_poll_fds;
605 gdb_notifier.num_fds--;
606 #else
607 internal_error (__FILE__, __LINE__,
608 _("use_poll without HAVE_POLL"));
609 #endif /* HAVE_POLL */
610 }
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]);
619
620 /* Find current max fd. */
621
622 if ((fd + 1) == gdb_notifier.num_fds)
623 {
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;
633 }
634 }
635
636 /* Deactivate the file descriptor, by clearing its mask,
637 so that it will not fire again. */
638
639 file_ptr->mask = 0;
640
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
652 /* Get rid of the file handler in the file handler list. */
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;
658 prev_ptr->next_file != file_ptr;
659 prev_ptr = prev_ptr->next_file)
660 ;
661 prev_ptr->next_file = file_ptr->next_file;
662 }
663 xfree (file_ptr);
664 }
665
666 /* Handle the given event by calling the procedure associated to the
667 corresponding file handler. */
668
669 static void
670 handle_file_event (file_handler *file_ptr, int ready_mask)
671 {
672 int mask;
673 #ifdef HAVE_POLL
674 int error_mask;
675 #endif
676
677 {
678 {
679 /* With poll, the ready_mask could have any of three events
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. */
685
686 /* See if the desired events (mask) match the received
687 events (ready_mask). */
688
689 if (use_poll)
690 {
691 #ifdef HAVE_POLL
692 /* POLLHUP means EOF, but can be combined with POLLIN to
693 signal more data to read. */
694 error_mask = POLLHUP | POLLERR | POLLNVAL;
695 mask = ready_mask & (file_ptr->mask | error_mask);
696
697 if ((mask & (POLLERR | POLLNVAL)) != 0)
698 {
699 /* Work in progress. We may need to tell somebody
700 what kind of error we had. */
701 if (mask & POLLERR)
702 printf_unfiltered (_("Error detected on fd %d\n"),
703 file_ptr->fd);
704 if (mask & POLLNVAL)
705 printf_unfiltered (_("Invalid or non-`poll'able fd %d\n"),
706 file_ptr->fd);
707 file_ptr->error = 1;
708 }
709 else
710 file_ptr->error = 0;
711 #else
712 internal_error (__FILE__, __LINE__,
713 _("use_poll without HAVE_POLL"));
714 #endif /* HAVE_POLL */
715 }
716 else
717 {
718 if (ready_mask & GDB_EXCEPTION)
719 {
720 printf_unfiltered (_("Exception condition detected "
721 "on fd %d\n"), file_ptr->fd);
722 file_ptr->error = 1;
723 }
724 else
725 file_ptr->error = 0;
726 mask = ready_mask & file_ptr->mask;
727 }
728
729 /* If there was a match, then call the handler. */
730 if (mask != 0)
731 (*file_ptr->proc) (file_ptr->error, file_ptr->client_data);
732 }
733 }
734 }
735
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
743 static int
744 gdb_wait_for_event (int block)
745 {
746 file_handler *file_ptr;
747 int num_found = 0;
748
749 /* Make sure all output is done before getting another event. */
750 gdb_flush (gdb_stdout);
751 gdb_flush (gdb_stderr);
752
753 if (gdb_notifier.num_fds == 0)
754 return -1;
755
756 if (block)
757 update_wait_timeout ();
758
759 if (use_poll)
760 {
761 #ifdef HAVE_POLL
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);
771
772 /* Don't print anything if we get out of poll because of a
773 signal. */
774 if (num_found == -1 && errno != EINTR)
775 perror_with_name (("poll"));
776 #else
777 internal_error (__FILE__, __LINE__,
778 _("use_poll without HAVE_POLL"));
779 #endif /* HAVE_POLL */
780 }
781 else
782 {
783 struct timeval select_timeout;
784 struct timeval *timeout_p;
785
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
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];
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],
802 timeout_p);
803
804 /* Clear the masks after an error from select. */
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]);
810
811 /* Dont print anything if we got a signal, let gdb handle
812 it. */
813 if (errno != EINTR)
814 perror_with_name (("select"));
815 }
816 }
817
818 /* Avoid looking at poll_fds[i]->revents if no event fired. */
819 if (num_found <= 0)
820 return 0;
821
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. */
826
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. */
830 if (use_poll)
831 {
832 #ifdef HAVE_POLL
833 int i;
834 int mask;
835
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++;
841
842 gdb_assert (i < gdb_notifier.num_fds);
843 if ((gdb_notifier.poll_fds + i)->revents)
844 break;
845 }
846
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;
853 }
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;
859 #else
860 internal_error (__FILE__, __LINE__,
861 _("use_poll without HAVE_POLL"));
862 #endif /* HAVE_POLL */
863 }
864 else
865 {
866 /* See comment about even source fairness above. */
867 int mask = 0;
868
869 do
870 {
871 file_ptr = get_next_file_handler_to_handle_and_advance ();
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;
879 }
880 while (mask == 0);
881
882 handle_file_event (file_ptr, mask);
883 return 1;
884 }
885 return 0;
886 }
887 \f
888
889 /* Create an asynchronous handler, allocating memory for it.
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
894 whenever the handler is invoked. */
895 async_signal_handler *
896 create_async_signal_handler (sig_handler_func * proc,
897 gdb_client_data client_data)
898 {
899 async_signal_handler *async_handler_ptr;
900
901 async_handler_ptr = XNEW (async_signal_handler);
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
914 /* Call the handler from HANDLER immediately. This function runs
915 signal handlers when returning to the event loop would be too
916 slow. */
917 void
918 call_async_signal_handler (struct async_signal_handler *handler)
919 {
920 (*handler->proc) (handler->client_data);
921 }
922
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. */
927 void
928 mark_async_signal_handler (async_signal_handler * async_handler_ptr)
929 {
930 async_handler_ptr->ready = 1;
931 serial_event_set (async_signal_handlers_serial_event);
932 }
933
934 /* See event-loop.h. */
935
936 void
937 clear_async_signal_handler (async_signal_handler *async_handler_ptr)
938 {
939 async_handler_ptr->ready = 0;
940 }
941
942 /* See event-loop.h. */
943
944 int
945 async_signal_handler_is_marked (async_signal_handler *async_handler_ptr)
946 {
947 return async_handler_ptr->ready;
948 }
949
950 /* Call all the handlers that are ready. Returns true if any was
951 indeed ready. */
952
953 static int
954 invoke_async_signal_handlers (void)
955 {
956 async_signal_handler *async_handler_ptr;
957 int any_ready = 0;
958
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. */
965
966 while (1)
967 {
968 for (async_handler_ptr = sighandler_list.first_handler;
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;
977 any_ready = 1;
978 async_handler_ptr->ready = 0;
979 (*async_handler_ptr->proc) (async_handler_ptr->client_data);
980 }
981
982 return any_ready;
983 }
984
985 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
986 Free the space allocated for it. */
987 void
988 delete_async_signal_handler (async_signal_handler ** async_handler_ptr)
989 {
990 async_signal_handler *prev_ptr;
991
992 if (sighandler_list.first_handler == (*async_handler_ptr))
993 {
994 sighandler_list.first_handler = (*async_handler_ptr)->next_handler;
995 if (sighandler_list.first_handler == NULL)
996 sighandler_list.last_handler = NULL;
997 }
998 else
999 {
1000 prev_ptr = sighandler_list.first_handler;
1001 while (prev_ptr && prev_ptr->next_handler != (*async_handler_ptr))
1002 prev_ptr = prev_ptr->next_handler;
1003 gdb_assert (prev_ptr);
1004 prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1005 if (sighandler_list.last_handler == (*async_handler_ptr))
1006 sighandler_list.last_handler = prev_ptr;
1007 }
1008 xfree ((*async_handler_ptr));
1009 (*async_handler_ptr) = NULL;
1010 }
1011
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. */
1016 async_event_handler *
1017 create_async_event_handler (async_event_handler_func *proc,
1018 gdb_client_data client_data)
1019 {
1020 async_event_handler *h;
1021
1022 h = XNEW (struct async_event_handler);
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. */
1039 void
1040 mark_async_event_handler (async_event_handler *async_handler_ptr)
1041 {
1042 async_handler_ptr->ready = 1;
1043 }
1044
1045 /* See event-loop.h. */
1046
1047 void
1048 clear_async_event_handler (async_event_handler *async_handler_ptr)
1049 {
1050 async_handler_ptr->ready = 0;
1051 }
1052
1053 /* Check if asynchronous event handlers are ready, and call the
1054 handler function for one that is. */
1055
1056 static int
1057 check_async_event_handlers (void)
1058 {
1059 async_event_handler *async_handler_ptr;
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;
1068 (*async_handler_ptr->proc) (async_handler_ptr->client_data);
1069 return 1;
1070 }
1071 }
1072
1073 return 0;
1074 }
1075
1076 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
1077 Free the space allocated for it. */
1078 void
1079 delete_async_event_handler (async_event_handler **async_handler_ptr)
1080 {
1081 async_event_handler *prev_ptr;
1082
1083 if (async_event_handler_list.first_handler == *async_handler_ptr)
1084 {
1085 async_event_handler_list.first_handler
1086 = (*async_handler_ptr)->next_handler;
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;
1095 gdb_assert (prev_ptr);
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;
1102 }
1103
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
1106 aded to the timers queue. This queue is kept sorted in order of
1107 increasing timers. Return a handle to the timer struct. */
1108 int
1109 create_timer (int milliseconds, timer_handler_func * proc,
1110 gdb_client_data client_data)
1111 {
1112 struct gdb_timer *timer_ptr, *timer_index, *prev_timer;
1113 struct timeval time_now, delta;
1114
1115 /* Compute seconds. */
1116 delta.tv_sec = milliseconds / 1000;
1117 /* Compute microseconds. */
1118 delta.tv_usec = (milliseconds % 1000) * 1000;
1119
1120 gettimeofday (&time_now, NULL);
1121
1122 timer_ptr = XNEW (struct gdb_timer);
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;
1125 /* Carry? */
1126 if (timer_ptr->when.tv_usec >= 1000000)
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;
1133 timer_list.num_timers++;
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
1137 increasing order of expiration. */
1138
1139 for (timer_index = timer_list.first_timer;
1140 timer_index != NULL;
1141 timer_index = timer_index->next)
1142 {
1143 /* If the seconds field is greater or if it is the same, but the
1144 microsecond field is greater. */
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)))
1148 break;
1149 }
1150
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 {
1159 for (prev_timer = timer_list.first_timer;
1160 prev_timer->next != timer_index;
1161 prev_timer = prev_timer->next)
1162 ;
1163
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
1173 it before it expires. */
1174 void
1175 delete_timer (int id)
1176 {
1177 struct gdb_timer *timer_ptr, *prev_timer = NULL;
1178
1179 /* Find the entry for the given timer. */
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;
1190 /* Get rid of the timer in the timer list. */
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 }
1201 xfree (timer_ptr);
1202
1203 gdb_notifier.timeout_valid = 0;
1204 }
1205
1206 /* Update the timeout for the select() or poll(). Returns true if the
1207 timer has already expired, false otherwise. */
1208
1209 static int
1210 update_wait_timeout (void)
1211 {
1212 struct timeval time_now, delta;
1213
1214 if (timer_list.first_timer != NULL)
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;
1219 /* Borrow? */
1220 if (delta.tv_usec < 0)
1221 {
1222 delta.tv_sec -= 1;
1223 delta.tv_usec += 1000000;
1224 }
1225
1226 /* Cannot simply test if delta.tv_sec is negative because time_t
1227 might be unsigned. */
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))
1231 {
1232 /* It expired already. */
1233 delta.tv_sec = 0;
1234 delta.tv_usec = 0;
1235 }
1236
1237 /* Update the timeout for select/ poll. */
1238 if (use_poll)
1239 {
1240 #ifdef HAVE_POLL
1241 gdb_notifier.poll_timeout = delta.tv_sec * 1000;
1242 #else
1243 internal_error (__FILE__, __LINE__,
1244 _("use_poll without HAVE_POLL"));
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 }
1252 gdb_notifier.timeout_valid = 1;
1253
1254 if (delta.tv_sec == 0 && delta.tv_usec == 0)
1255 return 1;
1256 }
1257 else
1258 gdb_notifier.timeout_valid = 0;
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
1268 static int
1269 poll_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;
1292 }