Move errno.h to common-defs.h
[deliverable/binutils-gdb.git] / gdb / event-loop.c
1 /* Event loop machinery for GDB, the GNU debugger.
2 Copyright (C) 1999-2014 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
25 #ifdef HAVE_POLL
26 #if defined (HAVE_POLL_H)
27 #include <poll.h>
28 #elif defined (HAVE_SYS_POLL_H)
29 #include <sys/poll.h>
30 #endif
31 #endif
32
33 #include <sys/types.h>
34 #include <sys/time.h>
35 #include "exceptions.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 DECLARE_QUEUE_P(gdb_event_p);
140 DEFINE_QUEUE_P(gdb_event_p);
141 static QUEUE(gdb_event_p) *event_queue = NULL;
142
143 /* Gdb_notifier is just a list of file descriptors gdb is interested in.
144 These are the input file descriptor, and the target file
145 descriptor. We have two flavors of the notifier, one for platforms
146 that have the POLL function, the other for those that don't, and
147 only support SELECT. Each of the elements in the gdb_notifier list is
148 basically a description of what kind of events gdb is interested
149 in, for each fd. */
150
151 /* As of 1999-04-30 only the input file descriptor is registered with the
152 event loop. */
153
154 /* Do we use poll or select ? */
155 #ifdef HAVE_POLL
156 #define USE_POLL 1
157 #else
158 #define USE_POLL 0
159 #endif /* HAVE_POLL */
160
161 static unsigned char use_poll = USE_POLL;
162
163 #ifdef USE_WIN32API
164 #include <windows.h>
165 #include <io.h>
166 #endif
167
168 static struct
169 {
170 /* Ptr to head of file handler list. */
171 file_handler *first_file_handler;
172
173 #ifdef HAVE_POLL
174 /* Ptr to array of pollfd structures. */
175 struct pollfd *poll_fds;
176
177 /* Timeout in milliseconds for calls to poll(). */
178 int poll_timeout;
179 #endif
180
181 /* Masks to be used in the next call to select.
182 Bits are set in response to calls to create_file_handler. */
183 fd_set check_masks[3];
184
185 /* What file descriptors were found ready by select. */
186 fd_set ready_masks[3];
187
188 /* Number of file descriptors to monitor (for poll). */
189 /* Number of valid bits (highest fd value + 1) (for select). */
190 int num_fds;
191
192 /* Time structure for calls to select(). */
193 struct timeval select_timeout;
194
195 /* Flag to tell whether the timeout should be used. */
196 int timeout_valid;
197 }
198 gdb_notifier;
199
200 /* Structure associated with a timer. PROC will be executed at the
201 first occasion after WHEN. */
202 struct gdb_timer
203 {
204 struct timeval when;
205 int timer_id;
206 struct gdb_timer *next;
207 timer_handler_func *proc; /* Function to call to do the work. */
208 gdb_client_data client_data; /* Argument to async_handler_func. */
209 };
210
211 /* List of currently active timers. It is sorted in order of
212 increasing timers. */
213 static struct
214 {
215 /* Pointer to first in timer list. */
216 struct gdb_timer *first_timer;
217
218 /* Id of the last timer created. */
219 int num_timers;
220 }
221 timer_list;
222
223 /* All the async_signal_handlers gdb is interested in are kept onto
224 this list. */
225 static struct
226 {
227 /* Pointer to first in handler list. */
228 async_signal_handler *first_handler;
229
230 /* Pointer to last in handler list. */
231 async_signal_handler *last_handler;
232 }
233 sighandler_list;
234
235 /* All the async_event_handlers gdb is interested in are kept onto
236 this list. */
237 static struct
238 {
239 /* Pointer to first in handler list. */
240 async_event_handler *first_handler;
241
242 /* Pointer to last in handler list. */
243 async_event_handler *last_handler;
244 }
245 async_event_handler_list;
246
247 static int invoke_async_signal_handlers (void);
248 static void create_file_handler (int fd, int mask, handler_func *proc,
249 gdb_client_data client_data);
250 static void handle_file_event (event_data data);
251 static void check_async_event_handlers (void);
252 static int gdb_wait_for_event (int);
253 static void poll_timers (void);
254 \f
255
256 /* Create a generic event, to be enqueued in the event queue for
257 processing. PROC is the procedure associated to the event. DATA
258 is passed to PROC upon PROC invocation. */
259
260 static gdb_event *
261 create_event (event_handler_func proc, event_data data)
262 {
263 gdb_event *event;
264
265 event = xmalloc (sizeof (*event));
266 event->proc = proc;
267 event->data = data;
268
269 return event;
270 }
271
272 /* Create a file event, to be enqueued in the event queue for
273 processing. The procedure associated to this event is always
274 handle_file_event, which will in turn invoke the one that was
275 associated to FD when it was registered with the event loop. */
276 static gdb_event *
277 create_file_event (int fd)
278 {
279 event_data data;
280
281 data.integer = fd;
282 return create_event (handle_file_event, data);
283 }
284
285
286 /* Free EVENT. */
287
288 static void
289 gdb_event_xfree (struct gdb_event *event)
290 {
291 xfree (event);
292 }
293
294 /* Initialize the event queue. */
295
296 void
297 initialize_event_loop (void)
298 {
299 event_queue = QUEUE_alloc (gdb_event_p, gdb_event_xfree);
300 }
301
302 /* Process one event.
303 The event can be the next one to be serviced in the event queue,
304 or an asynchronous event handler can be invoked in response to
305 the reception of a signal.
306 If an event was processed (either way), 1 is returned otherwise
307 0 is returned.
308 Scan the queue from head to tail, processing therefore the high
309 priority events first, by invoking the associated event handler
310 procedure. */
311 static int
312 process_event (void)
313 {
314 /* First let's see if there are any asynchronous event handlers that
315 are ready. These would be the result of invoking any of the
316 signal handlers. */
317
318 if (invoke_async_signal_handlers ())
319 return 1;
320
321 /* Look in the event queue to find an event that is ready
322 to be processed. */
323
324 if (!QUEUE_is_empty (gdb_event_p, event_queue))
325 {
326 /* Let's get rid of the event from the event queue. We need to
327 do this now because while processing the event, the proc
328 function could end up calling 'error' and therefore jump out
329 to the caller of this function, gdb_do_one_event. In that
330 case, we would have on the event queue an event wich has been
331 processed, but not deleted. */
332 gdb_event *event_ptr = QUEUE_deque (gdb_event_p, event_queue);
333 /* Call the handler for the event. */
334 event_handler_func *proc = event_ptr->proc;
335 event_data data = event_ptr->data;
336
337 gdb_event_xfree (event_ptr);
338
339 /* Now call the procedure associated with the event. */
340 (*proc) (data);
341 return 1;
342 }
343
344 /* This is the case if there are no event on the event queue. */
345 return 0;
346 }
347
348 /* Process one high level event. If nothing is ready at this time,
349 wait for something to happen (via gdb_wait_for_event), then process
350 it. Returns >0 if something was done otherwise returns <0 (this
351 can happen if there are no event sources to wait for). */
352
353 int
354 gdb_do_one_event (void)
355 {
356 static int event_source_head = 0;
357 const int number_of_sources = 3;
358 int current = 0;
359
360 /* Any events already waiting in the queue? */
361 if (process_event ())
362 return 1;
363
364 /* To level the fairness across event sources, we poll them in a
365 round-robin fashion. */
366 for (current = 0; current < number_of_sources; current++)
367 {
368 switch (event_source_head)
369 {
370 case 0:
371 /* Are any timers that are ready? If so, put an event on the
372 queue. */
373 poll_timers ();
374 break;
375 case 1:
376 /* Are there events already waiting to be collected on the
377 monitored file descriptors? */
378 gdb_wait_for_event (0);
379 break;
380 case 2:
381 /* Are there any asynchronous event handlers ready? */
382 check_async_event_handlers ();
383 break;
384 }
385
386 event_source_head++;
387 if (event_source_head == number_of_sources)
388 event_source_head = 0;
389 }
390
391 /* Handle any new events collected. */
392 if (process_event ())
393 return 1;
394
395 /* Block waiting for a new event. If gdb_wait_for_event returns -1,
396 we should get out because this means that there are no event
397 sources left. This will make the event loop stop, and the
398 application exit. */
399
400 if (gdb_wait_for_event (1) < 0)
401 return -1;
402
403 /* Handle any new events occurred while waiting. */
404 if (process_event ())
405 return 1;
406
407 /* If gdb_wait_for_event has returned 1, it means that one event has
408 been handled. We break out of the loop. */
409 return 1;
410 }
411
412 /* Start up the event loop. This is the entry point to the event loop
413 from the command loop. */
414
415 void
416 start_event_loop (void)
417 {
418 /* Loop until there is nothing to do. This is the entry point to
419 the event loop engine. gdb_do_one_event will process one event
420 for each invocation. It blocks waiting for an event and then
421 processes it. */
422 while (1)
423 {
424 volatile struct gdb_exception ex;
425 int result = 0;
426
427 TRY_CATCH (ex, RETURN_MASK_ALL)
428 {
429 result = gdb_do_one_event ();
430 }
431 if (ex.reason < 0)
432 {
433 exception_print (gdb_stderr, ex);
434
435 /* If any exception escaped to here, we better enable
436 stdin. Otherwise, any command that calls async_disable_stdin,
437 and then throws, will leave stdin inoperable. */
438 async_enable_stdin ();
439 /* If we long-jumped out of do_one_event, we probably didn't
440 get around to resetting the prompt, which leaves readline
441 in a messed-up state. Reset it here. */
442 observer_notify_command_error ();
443 /* This call looks bizarre, but it is required. If the user
444 entered a command that caused an error,
445 after_char_processing_hook won't be called from
446 rl_callback_read_char_wrapper. Using a cleanup there
447 won't work, since we want this function to be called
448 after a new prompt is printed. */
449 if (after_char_processing_hook)
450 (*after_char_processing_hook) ();
451 /* Maybe better to set a flag to be checked somewhere as to
452 whether display the prompt or not. */
453 }
454 if (result < 0)
455 break;
456 }
457
458 /* We are done with the event loop. There are no more event sources
459 to listen to. So we exit GDB. */
460 return;
461 }
462 \f
463
464 /* Wrapper function for create_file_handler, so that the caller
465 doesn't have to know implementation details about the use of poll
466 vs. select. */
467 void
468 add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
469 {
470 #ifdef HAVE_POLL
471 struct pollfd fds;
472 #endif
473
474 if (use_poll)
475 {
476 #ifdef HAVE_POLL
477 /* Check to see if poll () is usable. If not, we'll switch to
478 use select. This can happen on systems like
479 m68k-motorola-sys, `poll' cannot be used to wait for `stdin'.
480 On m68k-motorola-sysv, tty's are not stream-based and not
481 `poll'able. */
482 fds.fd = fd;
483 fds.events = POLLIN;
484 if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
485 use_poll = 0;
486 #else
487 internal_error (__FILE__, __LINE__,
488 _("use_poll without HAVE_POLL"));
489 #endif /* HAVE_POLL */
490 }
491 if (use_poll)
492 {
493 #ifdef HAVE_POLL
494 create_file_handler (fd, POLLIN, proc, client_data);
495 #else
496 internal_error (__FILE__, __LINE__,
497 _("use_poll without HAVE_POLL"));
498 #endif
499 }
500 else
501 create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION,
502 proc, client_data);
503 }
504
505 /* Add a file handler/descriptor to the list of descriptors we are
506 interested in.
507
508 FD is the file descriptor for the file/stream to be listened to.
509
510 For the poll case, MASK is a combination (OR) of POLLIN,
511 POLLRDNORM, POLLRDBAND, POLLPRI, POLLOUT, POLLWRNORM, POLLWRBAND:
512 these are the events we are interested in. If any of them occurs,
513 proc should be called.
514
515 For the select case, MASK is a combination of READABLE, WRITABLE,
516 EXCEPTION. PROC is the procedure that will be called when an event
517 occurs for FD. CLIENT_DATA is the argument to pass to PROC. */
518
519 static void
520 create_file_handler (int fd, int mask, handler_func * proc,
521 gdb_client_data client_data)
522 {
523 file_handler *file_ptr;
524
525 /* Do we already have a file handler for this file? (We may be
526 changing its associated procedure). */
527 for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
528 file_ptr = file_ptr->next_file)
529 {
530 if (file_ptr->fd == fd)
531 break;
532 }
533
534 /* It is a new file descriptor. Add it to the list. Otherwise, just
535 change the data associated with it. */
536 if (file_ptr == NULL)
537 {
538 file_ptr = (file_handler *) xmalloc (sizeof (file_handler));
539 file_ptr->fd = fd;
540 file_ptr->ready_mask = 0;
541 file_ptr->next_file = gdb_notifier.first_file_handler;
542 gdb_notifier.first_file_handler = file_ptr;
543
544 if (use_poll)
545 {
546 #ifdef HAVE_POLL
547 gdb_notifier.num_fds++;
548 if (gdb_notifier.poll_fds)
549 gdb_notifier.poll_fds =
550 (struct pollfd *) xrealloc (gdb_notifier.poll_fds,
551 (gdb_notifier.num_fds
552 * sizeof (struct pollfd)));
553 else
554 gdb_notifier.poll_fds =
555 (struct pollfd *) xmalloc (sizeof (struct pollfd));
556 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd;
557 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask;
558 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0;
559 #else
560 internal_error (__FILE__, __LINE__,
561 _("use_poll without HAVE_POLL"));
562 #endif /* HAVE_POLL */
563 }
564 else
565 {
566 if (mask & GDB_READABLE)
567 FD_SET (fd, &gdb_notifier.check_masks[0]);
568 else
569 FD_CLR (fd, &gdb_notifier.check_masks[0]);
570
571 if (mask & GDB_WRITABLE)
572 FD_SET (fd, &gdb_notifier.check_masks[1]);
573 else
574 FD_CLR (fd, &gdb_notifier.check_masks[1]);
575
576 if (mask & GDB_EXCEPTION)
577 FD_SET (fd, &gdb_notifier.check_masks[2]);
578 else
579 FD_CLR (fd, &gdb_notifier.check_masks[2]);
580
581 if (gdb_notifier.num_fds <= fd)
582 gdb_notifier.num_fds = fd + 1;
583 }
584 }
585
586 file_ptr->proc = proc;
587 file_ptr->client_data = client_data;
588 file_ptr->mask = mask;
589 }
590
591 /* Remove the file descriptor FD from the list of monitored fd's:
592 i.e. we don't care anymore about events on the FD. */
593 void
594 delete_file_handler (int fd)
595 {
596 file_handler *file_ptr, *prev_ptr = NULL;
597 int i;
598 #ifdef HAVE_POLL
599 int j;
600 struct pollfd *new_poll_fds;
601 #endif
602
603 /* Find the entry for the given file. */
604
605 for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
606 file_ptr = file_ptr->next_file)
607 {
608 if (file_ptr->fd == fd)
609 break;
610 }
611
612 if (file_ptr == NULL)
613 return;
614
615 if (use_poll)
616 {
617 #ifdef HAVE_POLL
618 /* Create a new poll_fds array by copying every fd's information
619 but the one we want to get rid of. */
620
621 new_poll_fds = (struct pollfd *)
622 xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
623
624 for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
625 {
626 if ((gdb_notifier.poll_fds + i)->fd != fd)
627 {
628 (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd;
629 (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events;
630 (new_poll_fds + j)->revents
631 = (gdb_notifier.poll_fds + i)->revents;
632 j++;
633 }
634 }
635 xfree (gdb_notifier.poll_fds);
636 gdb_notifier.poll_fds = new_poll_fds;
637 gdb_notifier.num_fds--;
638 #else
639 internal_error (__FILE__, __LINE__,
640 _("use_poll without HAVE_POLL"));
641 #endif /* HAVE_POLL */
642 }
643 else
644 {
645 if (file_ptr->mask & GDB_READABLE)
646 FD_CLR (fd, &gdb_notifier.check_masks[0]);
647 if (file_ptr->mask & GDB_WRITABLE)
648 FD_CLR (fd, &gdb_notifier.check_masks[1]);
649 if (file_ptr->mask & GDB_EXCEPTION)
650 FD_CLR (fd, &gdb_notifier.check_masks[2]);
651
652 /* Find current max fd. */
653
654 if ((fd + 1) == gdb_notifier.num_fds)
655 {
656 gdb_notifier.num_fds--;
657 for (i = gdb_notifier.num_fds; i; i--)
658 {
659 if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
660 || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
661 || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
662 break;
663 }
664 gdb_notifier.num_fds = i;
665 }
666 }
667
668 /* Deactivate the file descriptor, by clearing its mask,
669 so that it will not fire again. */
670
671 file_ptr->mask = 0;
672
673 /* Get rid of the file handler in the file handler list. */
674 if (file_ptr == gdb_notifier.first_file_handler)
675 gdb_notifier.first_file_handler = file_ptr->next_file;
676 else
677 {
678 for (prev_ptr = gdb_notifier.first_file_handler;
679 prev_ptr->next_file != file_ptr;
680 prev_ptr = prev_ptr->next_file)
681 ;
682 prev_ptr->next_file = file_ptr->next_file;
683 }
684 xfree (file_ptr);
685 }
686
687 /* Handle the given event by calling the procedure associated to the
688 corresponding file handler. Called by process_event indirectly,
689 through event_ptr->proc. EVENT_FILE_DESC is file descriptor of the
690 event in the front of the event queue. */
691 static void
692 handle_file_event (event_data data)
693 {
694 file_handler *file_ptr;
695 int mask;
696 #ifdef HAVE_POLL
697 int error_mask;
698 #endif
699 int event_file_desc = data.integer;
700
701 /* Search the file handler list to find one that matches the fd in
702 the event. */
703 for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
704 file_ptr = file_ptr->next_file)
705 {
706 if (file_ptr->fd == event_file_desc)
707 {
708 /* With poll, the ready_mask could have any of three events
709 set to 1: POLLHUP, POLLERR, POLLNVAL. These events
710 cannot be used in the requested event mask (events), but
711 they can be returned in the return mask (revents). We
712 need to check for those event too, and add them to the
713 mask which will be passed to the handler. */
714
715 /* See if the desired events (mask) match the received
716 events (ready_mask). */
717
718 if (use_poll)
719 {
720 #ifdef HAVE_POLL
721 /* POLLHUP means EOF, but can be combined with POLLIN to
722 signal more data to read. */
723 error_mask = POLLHUP | POLLERR | POLLNVAL;
724 mask = file_ptr->ready_mask & (file_ptr->mask | error_mask);
725
726 if ((mask & (POLLERR | POLLNVAL)) != 0)
727 {
728 /* Work in progress. We may need to tell somebody
729 what kind of error we had. */
730 if (mask & POLLERR)
731 printf_unfiltered (_("Error detected on fd %d\n"),
732 file_ptr->fd);
733 if (mask & POLLNVAL)
734 printf_unfiltered (_("Invalid or non-`poll'able fd %d\n"),
735 file_ptr->fd);
736 file_ptr->error = 1;
737 }
738 else
739 file_ptr->error = 0;
740 #else
741 internal_error (__FILE__, __LINE__,
742 _("use_poll without HAVE_POLL"));
743 #endif /* HAVE_POLL */
744 }
745 else
746 {
747 if (file_ptr->ready_mask & GDB_EXCEPTION)
748 {
749 printf_unfiltered (_("Exception condition detected "
750 "on fd %d\n"), file_ptr->fd);
751 file_ptr->error = 1;
752 }
753 else
754 file_ptr->error = 0;
755 mask = file_ptr->ready_mask & file_ptr->mask;
756 }
757
758 /* Clear the received events for next time around. */
759 file_ptr->ready_mask = 0;
760
761 /* If there was a match, then call the handler. */
762 if (mask != 0)
763 (*file_ptr->proc) (file_ptr->error, file_ptr->client_data);
764 break;
765 }
766 }
767 }
768
769 /* Called by gdb_do_one_event to wait for new events on the monitored
770 file descriptors. Queue file events as they are detected by the
771 poll. If BLOCK and if there are no events, this function will
772 block in the call to poll. Return -1 if there are no file
773 descriptors to monitor, otherwise return 0. */
774 static int
775 gdb_wait_for_event (int block)
776 {
777 file_handler *file_ptr;
778 gdb_event *file_event_ptr;
779 int num_found = 0;
780 int i;
781
782 /* Make sure all output is done before getting another event. */
783 gdb_flush (gdb_stdout);
784 gdb_flush (gdb_stderr);
785
786 if (gdb_notifier.num_fds == 0)
787 return -1;
788
789 if (use_poll)
790 {
791 #ifdef HAVE_POLL
792 int timeout;
793
794 if (block)
795 timeout = gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1;
796 else
797 timeout = 0;
798
799 num_found = poll (gdb_notifier.poll_fds,
800 (unsigned long) gdb_notifier.num_fds, timeout);
801
802 /* Don't print anything if we get out of poll because of a
803 signal. */
804 if (num_found == -1 && errno != EINTR)
805 perror_with_name (("poll"));
806 #else
807 internal_error (__FILE__, __LINE__,
808 _("use_poll without HAVE_POLL"));
809 #endif /* HAVE_POLL */
810 }
811 else
812 {
813 struct timeval select_timeout;
814 struct timeval *timeout_p;
815
816 if (block)
817 timeout_p = gdb_notifier.timeout_valid
818 ? &gdb_notifier.select_timeout : NULL;
819 else
820 {
821 memset (&select_timeout, 0, sizeof (select_timeout));
822 timeout_p = &select_timeout;
823 }
824
825 gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
826 gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
827 gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
828 num_found = gdb_select (gdb_notifier.num_fds,
829 &gdb_notifier.ready_masks[0],
830 &gdb_notifier.ready_masks[1],
831 &gdb_notifier.ready_masks[2],
832 timeout_p);
833
834 /* Clear the masks after an error from select. */
835 if (num_found == -1)
836 {
837 FD_ZERO (&gdb_notifier.ready_masks[0]);
838 FD_ZERO (&gdb_notifier.ready_masks[1]);
839 FD_ZERO (&gdb_notifier.ready_masks[2]);
840
841 /* Dont print anything if we got a signal, let gdb handle
842 it. */
843 if (errno != EINTR)
844 perror_with_name (("select"));
845 }
846 }
847
848 /* Enqueue all detected file events. */
849
850 if (use_poll)
851 {
852 #ifdef HAVE_POLL
853 for (i = 0; (i < gdb_notifier.num_fds) && (num_found > 0); i++)
854 {
855 if ((gdb_notifier.poll_fds + i)->revents)
856 num_found--;
857 else
858 continue;
859
860 for (file_ptr = gdb_notifier.first_file_handler;
861 file_ptr != NULL;
862 file_ptr = file_ptr->next_file)
863 {
864 if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd)
865 break;
866 }
867
868 if (file_ptr)
869 {
870 /* Enqueue an event only if this is still a new event for
871 this fd. */
872 if (file_ptr->ready_mask == 0)
873 {
874 file_event_ptr = create_file_event (file_ptr->fd);
875 QUEUE_enque (gdb_event_p, event_queue, file_event_ptr);
876 }
877 file_ptr->ready_mask = (gdb_notifier.poll_fds + i)->revents;
878 }
879 }
880 #else
881 internal_error (__FILE__, __LINE__,
882 _("use_poll without HAVE_POLL"));
883 #endif /* HAVE_POLL */
884 }
885 else
886 {
887 for (file_ptr = gdb_notifier.first_file_handler;
888 (file_ptr != NULL) && (num_found > 0);
889 file_ptr = file_ptr->next_file)
890 {
891 int mask = 0;
892
893 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
894 mask |= GDB_READABLE;
895 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
896 mask |= GDB_WRITABLE;
897 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
898 mask |= GDB_EXCEPTION;
899
900 if (!mask)
901 continue;
902 else
903 num_found--;
904
905 /* Enqueue an event only if this is still a new event for
906 this fd. */
907
908 if (file_ptr->ready_mask == 0)
909 {
910 file_event_ptr = create_file_event (file_ptr->fd);
911 QUEUE_enque (gdb_event_p, event_queue, file_event_ptr);
912 }
913 file_ptr->ready_mask = mask;
914 }
915 }
916 return 0;
917 }
918 \f
919
920 /* Create an asynchronous handler, allocating memory for it.
921 Return a pointer to the newly created handler.
922 This pointer will be used to invoke the handler by
923 invoke_async_signal_handler.
924 PROC is the function to call with CLIENT_DATA argument
925 whenever the handler is invoked. */
926 async_signal_handler *
927 create_async_signal_handler (sig_handler_func * proc,
928 gdb_client_data client_data)
929 {
930 async_signal_handler *async_handler_ptr;
931
932 async_handler_ptr =
933 (async_signal_handler *) xmalloc (sizeof (async_signal_handler));
934 async_handler_ptr->ready = 0;
935 async_handler_ptr->next_handler = NULL;
936 async_handler_ptr->proc = proc;
937 async_handler_ptr->client_data = client_data;
938 if (sighandler_list.first_handler == NULL)
939 sighandler_list.first_handler = async_handler_ptr;
940 else
941 sighandler_list.last_handler->next_handler = async_handler_ptr;
942 sighandler_list.last_handler = async_handler_ptr;
943 return async_handler_ptr;
944 }
945
946 /* Call the handler from HANDLER immediately. This function runs
947 signal handlers when returning to the event loop would be too
948 slow. */
949 void
950 call_async_signal_handler (struct async_signal_handler *handler)
951 {
952 (*handler->proc) (handler->client_data);
953 }
954
955 /* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information
956 will be used when the handlers are invoked, after we have waited
957 for some event. The caller of this function is the interrupt
958 handler associated with a signal. */
959 void
960 mark_async_signal_handler (async_signal_handler * async_handler_ptr)
961 {
962 async_handler_ptr->ready = 1;
963 }
964
965 /* Call all the handlers that are ready. Returns true if any was
966 indeed ready. */
967 static int
968 invoke_async_signal_handlers (void)
969 {
970 async_signal_handler *async_handler_ptr;
971 int any_ready = 0;
972
973 /* Invoke ready handlers. */
974
975 while (1)
976 {
977 for (async_handler_ptr = sighandler_list.first_handler;
978 async_handler_ptr != NULL;
979 async_handler_ptr = async_handler_ptr->next_handler)
980 {
981 if (async_handler_ptr->ready)
982 break;
983 }
984 if (async_handler_ptr == NULL)
985 break;
986 any_ready = 1;
987 async_handler_ptr->ready = 0;
988 (*async_handler_ptr->proc) (async_handler_ptr->client_data);
989 }
990
991 return any_ready;
992 }
993
994 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
995 Free the space allocated for it. */
996 void
997 delete_async_signal_handler (async_signal_handler ** async_handler_ptr)
998 {
999 async_signal_handler *prev_ptr;
1000
1001 if (sighandler_list.first_handler == (*async_handler_ptr))
1002 {
1003 sighandler_list.first_handler = (*async_handler_ptr)->next_handler;
1004 if (sighandler_list.first_handler == NULL)
1005 sighandler_list.last_handler = NULL;
1006 }
1007 else
1008 {
1009 prev_ptr = sighandler_list.first_handler;
1010 while (prev_ptr && prev_ptr->next_handler != (*async_handler_ptr))
1011 prev_ptr = prev_ptr->next_handler;
1012 gdb_assert (prev_ptr);
1013 prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1014 if (sighandler_list.last_handler == (*async_handler_ptr))
1015 sighandler_list.last_handler = prev_ptr;
1016 }
1017 xfree ((*async_handler_ptr));
1018 (*async_handler_ptr) = NULL;
1019 }
1020
1021 /* Create an asynchronous event handler, allocating memory for it.
1022 Return a pointer to the newly created handler. PROC is the
1023 function to call with CLIENT_DATA argument whenever the handler is
1024 invoked. */
1025 async_event_handler *
1026 create_async_event_handler (async_event_handler_func *proc,
1027 gdb_client_data client_data)
1028 {
1029 async_event_handler *h;
1030
1031 h = xmalloc (sizeof (*h));
1032 h->ready = 0;
1033 h->next_handler = NULL;
1034 h->proc = proc;
1035 h->client_data = client_data;
1036 if (async_event_handler_list.first_handler == NULL)
1037 async_event_handler_list.first_handler = h;
1038 else
1039 async_event_handler_list.last_handler->next_handler = h;
1040 async_event_handler_list.last_handler = h;
1041 return h;
1042 }
1043
1044 /* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information
1045 will be used by gdb_do_one_event. The caller will be whoever
1046 created the event source, and wants to signal that the event is
1047 ready to be handled. */
1048 void
1049 mark_async_event_handler (async_event_handler *async_handler_ptr)
1050 {
1051 async_handler_ptr->ready = 1;
1052 }
1053
1054 struct async_event_handler_data
1055 {
1056 async_event_handler_func* proc;
1057 gdb_client_data client_data;
1058 };
1059
1060 static void
1061 invoke_async_event_handler (event_data data)
1062 {
1063 struct async_event_handler_data *hdata = data.ptr;
1064 async_event_handler_func* proc = hdata->proc;
1065 gdb_client_data client_data = hdata->client_data;
1066
1067 xfree (hdata);
1068 (*proc) (client_data);
1069 }
1070
1071 /* Check if any asynchronous event handlers are ready, and queue
1072 events in the ready queue for any that are. */
1073 static void
1074 check_async_event_handlers (void)
1075 {
1076 async_event_handler *async_handler_ptr;
1077 struct async_event_handler_data *hdata;
1078 struct gdb_event *event_ptr;
1079 event_data data;
1080
1081 for (async_handler_ptr = async_event_handler_list.first_handler;
1082 async_handler_ptr != NULL;
1083 async_handler_ptr = async_handler_ptr->next_handler)
1084 {
1085 if (async_handler_ptr->ready)
1086 {
1087 async_handler_ptr->ready = 0;
1088
1089 hdata = xmalloc (sizeof (*hdata));
1090
1091 hdata->proc = async_handler_ptr->proc;
1092 hdata->client_data = async_handler_ptr->client_data;
1093
1094 data.ptr = hdata;
1095
1096 event_ptr = create_event (invoke_async_event_handler, data);
1097 QUEUE_enque (gdb_event_p, event_queue, event_ptr);
1098 }
1099 }
1100 }
1101
1102 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
1103 Free the space allocated for it. */
1104 void
1105 delete_async_event_handler (async_event_handler **async_handler_ptr)
1106 {
1107 async_event_handler *prev_ptr;
1108
1109 if (async_event_handler_list.first_handler == *async_handler_ptr)
1110 {
1111 async_event_handler_list.first_handler
1112 = (*async_handler_ptr)->next_handler;
1113 if (async_event_handler_list.first_handler == NULL)
1114 async_event_handler_list.last_handler = NULL;
1115 }
1116 else
1117 {
1118 prev_ptr = async_event_handler_list.first_handler;
1119 while (prev_ptr && prev_ptr->next_handler != *async_handler_ptr)
1120 prev_ptr = prev_ptr->next_handler;
1121 gdb_assert (prev_ptr);
1122 prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1123 if (async_event_handler_list.last_handler == (*async_handler_ptr))
1124 async_event_handler_list.last_handler = prev_ptr;
1125 }
1126 xfree (*async_handler_ptr);
1127 *async_handler_ptr = NULL;
1128 }
1129
1130 /* Create a timer that will expire in MILLISECONDS from now. When the
1131 timer is ready, PROC will be executed. At creation, the timer is
1132 aded to the timers queue. This queue is kept sorted in order of
1133 increasing timers. Return a handle to the timer struct. */
1134 int
1135 create_timer (int milliseconds, timer_handler_func * proc,
1136 gdb_client_data client_data)
1137 {
1138 struct gdb_timer *timer_ptr, *timer_index, *prev_timer;
1139 struct timeval time_now, delta;
1140
1141 /* Compute seconds. */
1142 delta.tv_sec = milliseconds / 1000;
1143 /* Compute microseconds. */
1144 delta.tv_usec = (milliseconds % 1000) * 1000;
1145
1146 gettimeofday (&time_now, NULL);
1147
1148 timer_ptr = (struct gdb_timer *) xmalloc (sizeof (*timer_ptr));
1149 timer_ptr->when.tv_sec = time_now.tv_sec + delta.tv_sec;
1150 timer_ptr->when.tv_usec = time_now.tv_usec + delta.tv_usec;
1151 /* Carry? */
1152 if (timer_ptr->when.tv_usec >= 1000000)
1153 {
1154 timer_ptr->when.tv_sec += 1;
1155 timer_ptr->when.tv_usec -= 1000000;
1156 }
1157 timer_ptr->proc = proc;
1158 timer_ptr->client_data = client_data;
1159 timer_list.num_timers++;
1160 timer_ptr->timer_id = timer_list.num_timers;
1161
1162 /* Now add the timer to the timer queue, making sure it is sorted in
1163 increasing order of expiration. */
1164
1165 for (timer_index = timer_list.first_timer;
1166 timer_index != NULL;
1167 timer_index = timer_index->next)
1168 {
1169 /* If the seconds field is greater or if it is the same, but the
1170 microsecond field is greater. */
1171 if ((timer_index->when.tv_sec > timer_ptr->when.tv_sec)
1172 || ((timer_index->when.tv_sec == timer_ptr->when.tv_sec)
1173 && (timer_index->when.tv_usec > timer_ptr->when.tv_usec)))
1174 break;
1175 }
1176
1177 if (timer_index == timer_list.first_timer)
1178 {
1179 timer_ptr->next = timer_list.first_timer;
1180 timer_list.first_timer = timer_ptr;
1181
1182 }
1183 else
1184 {
1185 for (prev_timer = timer_list.first_timer;
1186 prev_timer->next != timer_index;
1187 prev_timer = prev_timer->next)
1188 ;
1189
1190 prev_timer->next = timer_ptr;
1191 timer_ptr->next = timer_index;
1192 }
1193
1194 gdb_notifier.timeout_valid = 0;
1195 return timer_ptr->timer_id;
1196 }
1197
1198 /* There is a chance that the creator of the timer wants to get rid of
1199 it before it expires. */
1200 void
1201 delete_timer (int id)
1202 {
1203 struct gdb_timer *timer_ptr, *prev_timer = NULL;
1204
1205 /* Find the entry for the given timer. */
1206
1207 for (timer_ptr = timer_list.first_timer; timer_ptr != NULL;
1208 timer_ptr = timer_ptr->next)
1209 {
1210 if (timer_ptr->timer_id == id)
1211 break;
1212 }
1213
1214 if (timer_ptr == NULL)
1215 return;
1216 /* Get rid of the timer in the timer list. */
1217 if (timer_ptr == timer_list.first_timer)
1218 timer_list.first_timer = timer_ptr->next;
1219 else
1220 {
1221 for (prev_timer = timer_list.first_timer;
1222 prev_timer->next != timer_ptr;
1223 prev_timer = prev_timer->next)
1224 ;
1225 prev_timer->next = timer_ptr->next;
1226 }
1227 xfree (timer_ptr);
1228
1229 gdb_notifier.timeout_valid = 0;
1230 }
1231
1232 /* When a timer event is put on the event queue, it will be handled by
1233 this function. Just call the associated procedure and delete the
1234 timer event from the event queue. Repeat this for each timer that
1235 has expired. */
1236 static void
1237 handle_timer_event (event_data dummy)
1238 {
1239 struct timeval time_now;
1240 struct gdb_timer *timer_ptr, *saved_timer;
1241
1242 gettimeofday (&time_now, NULL);
1243 timer_ptr = timer_list.first_timer;
1244
1245 while (timer_ptr != NULL)
1246 {
1247 if ((timer_ptr->when.tv_sec > time_now.tv_sec)
1248 || ((timer_ptr->when.tv_sec == time_now.tv_sec)
1249 && (timer_ptr->when.tv_usec > time_now.tv_usec)))
1250 break;
1251
1252 /* Get rid of the timer from the beginning of the list. */
1253 timer_list.first_timer = timer_ptr->next;
1254 saved_timer = timer_ptr;
1255 timer_ptr = timer_ptr->next;
1256 /* Call the procedure associated with that timer. */
1257 (*saved_timer->proc) (saved_timer->client_data);
1258 xfree (saved_timer);
1259 }
1260
1261 gdb_notifier.timeout_valid = 0;
1262 }
1263
1264 /* Check whether any timers in the timers queue are ready. If at least
1265 one timer is ready, stick an event onto the event queue. Even in
1266 case more than one timer is ready, one event is enough, because the
1267 handle_timer_event() will go through the timers list and call the
1268 procedures associated with all that have expired.l Update the
1269 timeout for the select() or poll() as well. */
1270 static void
1271 poll_timers (void)
1272 {
1273 struct timeval time_now, delta;
1274 gdb_event *event_ptr;
1275
1276 if (timer_list.first_timer != NULL)
1277 {
1278 gettimeofday (&time_now, NULL);
1279 delta.tv_sec = timer_list.first_timer->when.tv_sec - time_now.tv_sec;
1280 delta.tv_usec = timer_list.first_timer->when.tv_usec - time_now.tv_usec;
1281 /* Borrow? */
1282 if (delta.tv_usec < 0)
1283 {
1284 delta.tv_sec -= 1;
1285 delta.tv_usec += 1000000;
1286 }
1287
1288 /* Oops it expired already. Tell select / poll to return
1289 immediately. (Cannot simply test if delta.tv_sec is negative
1290 because time_t might be unsigned.) */
1291 if (timer_list.first_timer->when.tv_sec < time_now.tv_sec
1292 || (timer_list.first_timer->when.tv_sec == time_now.tv_sec
1293 && timer_list.first_timer->when.tv_usec < time_now.tv_usec))
1294 {
1295 delta.tv_sec = 0;
1296 delta.tv_usec = 0;
1297 }
1298
1299 if (delta.tv_sec == 0 && delta.tv_usec == 0)
1300 {
1301 event_ptr = (gdb_event *) xmalloc (sizeof (gdb_event));
1302 event_ptr->proc = handle_timer_event;
1303 event_ptr->data.integer = timer_list.first_timer->timer_id;
1304 QUEUE_enque (gdb_event_p, event_queue, event_ptr);
1305 }
1306
1307 /* Now we need to update the timeout for select/ poll, because
1308 we don't want to sit there while this timer is expiring. */
1309 if (use_poll)
1310 {
1311 #ifdef HAVE_POLL
1312 gdb_notifier.poll_timeout = delta.tv_sec * 1000;
1313 #else
1314 internal_error (__FILE__, __LINE__,
1315 _("use_poll without HAVE_POLL"));
1316 #endif /* HAVE_POLL */
1317 }
1318 else
1319 {
1320 gdb_notifier.select_timeout.tv_sec = delta.tv_sec;
1321 gdb_notifier.select_timeout.tv_usec = delta.tv_usec;
1322 }
1323 gdb_notifier.timeout_valid = 1;
1324 }
1325 else
1326 gdb_notifier.timeout_valid = 0;
1327 }
This page took 0.085753 seconds and 4 git commands to generate.