* event-loop.c (gdb_do_one_event): Make public.
[platform/upstream/binutils.git] / gdb / event-loop.c
1 /* Event loop machinery for GDB, the GNU debugger.
2    Copyright 1999, 2000, 2001 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 2 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, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA. */
21
22 #include "defs.h"
23 #include "event-loop.h"
24 #include "event-top.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_string.h"
36 #include <errno.h>
37 #include <sys/time.h>
38
39 typedef struct gdb_event gdb_event;
40 typedef void (event_handler_func) (int);
41
42 /* Event for the GDB event system.  Events are queued by calling
43    async_queue_event and serviced later on by gdb_do_one_event. An
44    event can be, for instance, a file descriptor becoming ready to be
45    read. Servicing an event simply means that the procedure PROC will
46    be called.  We have 2 queues, one for file handlers that we listen
47    to in the event loop, and one for the file handlers+events that are
48    ready. The procedure PROC associated with each event is always the
49    same (handle_file_event).  Its duty is to invoke the handler
50    associated with the file descriptor whose state change generated
51    the event, plus doing other cleanups and such. */
52
53 struct gdb_event
54   {
55     event_handler_func *proc;   /* Procedure to call to service this event. */
56     int fd;                     /* File descriptor that is ready. */
57     struct gdb_event *next_event;       /* Next in list of events or NULL. */
58   };
59
60 /* Information about each file descriptor we register with the event
61    loop. */
62
63 typedef struct file_handler
64   {
65     int fd;                     /* File descriptor. */
66     int mask;                   /* Events we want to monitor: POLLIN, etc. */
67     int ready_mask;             /* Events that have been seen since
68                                    the last time. */
69     handler_func *proc;         /* Procedure to call when fd is ready. */
70     gdb_client_data client_data;        /* Argument to pass to proc. */
71     int error;                  /* Was an error detected on this fd? */
72     struct file_handler *next_file;     /* Next registered file descriptor. */
73   }
74 file_handler;
75
76 /* PROC is a function to be invoked when the READY flag is set. This
77    happens when there has been a signal and the corresponding signal
78    handler has 'triggered' this async_signal_handler for
79    execution. The actual work to be done in response to a signal will
80    be carried out by PROC at a later time, within process_event. This
81    provides a deferred execution of signal handlers.
82    Async_init_signals takes care of setting up such an
83    asyn_signal_handler for each interesting signal. */
84 typedef struct async_signal_handler
85   {
86     int ready;                  /* If ready, call this handler from the main event loop, 
87                                    using invoke_async_handler. */
88     struct async_signal_handler *next_handler;  /* Ptr to next handler */
89     sig_handler_func *proc;     /* Function to call to do the work */
90     gdb_client_data client_data;        /* Argument to async_handler_func */
91   }
92 async_signal_handler;
93
94
95 /* Event queue:  
96    - the first event in the queue is the head of the queue. 
97    It will be the next to be serviced.
98    - the last event in the queue 
99
100    Events can be inserted at the front of the queue or at the end of
101    the queue.  Events will be extracted from the queue for processing
102    starting from the head.  Therefore, events inserted at the head of
103    the queue will be processed in a last in first out fashion, while
104    those inserted at the tail of the queue will be processed in a first
105    in first out manner.  All the fields are NULL if the queue is
106    empty. */
107
108 static struct
109   {
110     gdb_event *first_event;     /* First pending event */
111     gdb_event *last_event;      /* Last pending event */
112   }
113 event_queue;
114
115 /* Gdb_notifier is just a list of file descriptors gdb is interested in.
116    These are the input file descriptor, and the target file
117    descriptor. We have two flavors of the notifier, one for platforms
118    that have the POLL function, the other for those that don't, and
119    only support SELECT. Each of the elements in the gdb_notifier list is
120    basically a description of what kind of events gdb is interested
121    in, for each fd. */
122
123 /* As of 1999-04-30 only the input file descriptor is registered with the
124    event loop. */
125
126 /* Do we use poll or select ? */
127 #ifdef HAVE_POLL
128 #define USE_POLL 1
129 #else
130 #define USE_POLL 0
131 #endif /* HAVE_POLL */
132
133 static unsigned char use_poll = USE_POLL;
134
135 static struct
136   {
137     /* Ptr to head of file handler list. */
138     file_handler *first_file_handler;
139
140 #ifdef HAVE_POLL
141     /* Ptr to array of pollfd structures. */
142     struct pollfd *poll_fds;
143
144     /* Timeout in milliseconds for calls to poll(). */
145     int poll_timeout;
146 #endif
147
148     /* Masks to be used in the next call to select.
149        Bits are set in response to calls to create_file_handler. */
150     fd_set check_masks[3];
151
152     /* What file descriptors were found ready by select. */
153     fd_set ready_masks[3];
154
155     /* Number of file descriptors to monitor. (for poll) */
156     /* Number of valid bits (highest fd value + 1). (for select) */
157     int num_fds;
158
159     /* Time structure for calls to select(). */
160     struct timeval select_timeout;
161
162     /* Flag to tell whether the timeout should be used. */
163     int timeout_valid;
164   }
165 gdb_notifier;
166
167 /* Structure associated with a timer. PROC will be executed at the
168    first occasion after WHEN. */
169 struct gdb_timer
170   {
171     struct timeval when;
172     int timer_id;
173     struct gdb_timer *next;
174     timer_handler_func *proc;   /* Function to call to do the work */
175     gdb_client_data client_data;        /* Argument to async_handler_func */
176   }
177 gdb_timer;
178
179 /* List of currently active timers. It is sorted in order of
180    increasing timers. */
181 static struct
182   {
183     /* Pointer to first in timer list. */
184     struct gdb_timer *first_timer;
185
186     /* Id of the last timer created. */
187     int num_timers;
188   }
189 timer_list;
190
191 /* All the async_signal_handlers gdb is interested in are kept onto
192    this list. */
193 static struct
194   {
195     /* Pointer to first in handler list. */
196     async_signal_handler *first_handler;
197
198     /* Pointer to last in handler list. */
199     async_signal_handler *last_handler;
200   }
201 sighandler_list;
202
203 /* Are any of the handlers ready?  Check this variable using
204    check_async_ready. This is used by process_event, to determine
205    whether or not to invoke the invoke_async_signal_handler
206    function. */
207 static int async_handler_ready = 0;
208
209 static void create_file_handler (int fd, int mask, handler_func * proc, gdb_client_data client_data);
210 static void invoke_async_signal_handler (void);
211 static void handle_file_event (int event_file_desc);
212 static int gdb_wait_for_event (void);
213 static int check_async_ready (void);
214 static void async_queue_event (gdb_event * event_ptr, queue_position position);
215 static gdb_event *create_file_event (int fd);
216 static int process_event (void);
217 static void handle_timer_event (int dummy);
218 static void poll_timers (void);
219 \f
220
221 /* Insert an event object into the gdb event queue at 
222    the specified position.
223    POSITION can be head or tail, with values TAIL, HEAD.
224    EVENT_PTR points to the event to be inserted into the queue.
225    The caller must allocate memory for the event. It is freed
226    after the event has ben handled.
227    Events in the queue will be processed head to tail, therefore,
228    events inserted at the head of the queue will be processed
229    as last in first out. Event appended at the tail of the queue
230    will be processed first in first out. */
231 static void
232 async_queue_event (gdb_event * event_ptr, queue_position position)
233 {
234   if (position == TAIL)
235     {
236       /* The event will become the new last_event. */
237
238       event_ptr->next_event = NULL;
239       if (event_queue.first_event == NULL)
240         event_queue.first_event = event_ptr;
241       else
242         event_queue.last_event->next_event = event_ptr;
243       event_queue.last_event = event_ptr;
244     }
245   else if (position == HEAD)
246     {
247       /* The event becomes the new first_event. */
248
249       event_ptr->next_event = event_queue.first_event;
250       if (event_queue.first_event == NULL)
251         event_queue.last_event = event_ptr;
252       event_queue.first_event = event_ptr;
253     }
254 }
255
256 /* Create a file event, to be enqueued in the event queue for
257    processing. The procedure associated to this event is always
258    handle_file_event, which will in turn invoke the one that was
259    associated to FD when it was registered with the event loop. */
260 static gdb_event *
261 create_file_event (int fd)
262 {
263   gdb_event *file_event_ptr;
264
265   file_event_ptr = (gdb_event *) xmalloc (sizeof (gdb_event));
266   file_event_ptr->proc = handle_file_event;
267   file_event_ptr->fd = fd;
268   return (file_event_ptr);
269 }
270
271 /* Process one event.
272    The event can be the next one to be serviced in the event queue,
273    or an asynchronous event handler can be invoked in response to
274    the reception of a signal.
275    If an event was processed (either way), 1 is returned otherwise
276    0 is returned.   
277    Scan the queue from head to tail, processing therefore the high
278    priority events first, by invoking the associated event handler
279    procedure. */
280 static int
281 process_event (void)
282 {
283   gdb_event *event_ptr, *prev_ptr;
284   event_handler_func *proc;
285   int fd;
286
287   /* First let's see if there are any asynchronous event handlers that
288      are ready. These would be the result of invoking any of the
289      signal handlers. */
290
291   if (check_async_ready ())
292     {
293       invoke_async_signal_handler ();
294       return 1;
295     }
296
297   /* Look in the event queue to find an event that is ready
298      to be processed. */
299
300   for (event_ptr = event_queue.first_event; event_ptr != NULL;
301        event_ptr = event_ptr->next_event)
302     {
303       /* Call the handler for the event. */
304
305       proc = event_ptr->proc;
306       fd = event_ptr->fd;
307
308       /* Let's get rid of the event from the event queue.  We need to
309          do this now because while processing the event, the proc
310          function could end up calling 'error' and therefore jump out
311          to the caller of this function, gdb_do_one_event. In that
312          case, we would have on the event queue an event wich has been
313          processed, but not deleted. */
314
315       if (event_queue.first_event == event_ptr)
316         {
317           event_queue.first_event = event_ptr->next_event;
318           if (event_ptr->next_event == NULL)
319             event_queue.last_event = NULL;
320         }
321       else
322         {
323           prev_ptr = event_queue.first_event;
324           while (prev_ptr->next_event != event_ptr)
325             prev_ptr = prev_ptr->next_event;
326
327           prev_ptr->next_event = event_ptr->next_event;
328           if (event_ptr->next_event == NULL)
329             event_queue.last_event = prev_ptr;
330         }
331       xfree (event_ptr);
332
333       /* Now call the procedure associated with the event. */
334       (*proc) (fd);
335       return 1;
336     }
337
338   /* this is the case if there are no event on the event queue. */
339   return 0;
340 }
341
342 /* Process one high level event.  If nothing is ready at this time,
343    wait for something to happen (via gdb_wait_for_event), then process
344    it.  Returns >0 if something was done otherwise returns <0 (this
345    can happen if there are no event sources to wait for).  If an error
346    occurs catch_errors() which calls this function returns zero. */
347
348 int
349 gdb_do_one_event (void *data)
350 {
351   /* Any events already waiting in the queue? */
352   if (process_event ())
353     {
354       return 1;
355     }
356
357   /* Are any timers that are ready? If so, put an event on the queue. */
358   poll_timers ();
359
360   /* Wait for a new event.  If gdb_wait_for_event returns -1,
361      we should get out because this means that there are no
362      event sources left. This will make the event loop stop,
363      and the application exit. */
364
365   if (gdb_wait_for_event () < 0)
366     {
367       return -1;
368     }
369
370   /* Handle any new events occurred while waiting. */
371   if (process_event ())
372     {
373       return 1;
374     }
375
376   /* If gdb_wait_for_event has returned 1, it means that one
377      event has been handled. We break out of the loop. */
378   return 1;
379 }
380
381 /* Start up the event loop. This is the entry point to the event loop
382    from the command loop. */
383
384 void
385 start_event_loop (void)
386 {
387   /* Loop until there is nothing to do. This is the entry point to the
388      event loop engine. gdb_do_one_event, called via catch_errors()
389      will process one event for each invocation.  It blocks waits for
390      an event and then processes it.  >0 when an event is processed, 0
391      when catch_errors() caught an error and <0 when there are no
392      longer any event sources registered. */
393   while (1)
394     {
395       int result = catch_errors (gdb_do_one_event, 0, "", RETURN_MASK_ALL);
396       if (result < 0)
397         break;
398       if (result == 0)
399         {
400           /* FIXME: this should really be a call to a hook that is
401              interface specific, because interfaces can display the
402              prompt in their own way. */
403           display_gdb_prompt (0);
404           /* This call looks bizarre, but it is required.  If the user
405              entered a command that caused an error,
406              after_char_processing_hook won't be called from
407              rl_callback_read_char_wrapper.  Using a cleanup there
408              won't work, since we want this function to be called
409              after a new prompt is printed.  */
410           if (after_char_processing_hook)
411             (*after_char_processing_hook) ();
412           /* Maybe better to set a flag to be checked somewhere as to
413              whether display the prompt or not. */
414         }
415     }
416
417   /* We are done with the event loop. There are no more event sources
418      to listen to.  So we exit GDB. */
419   return;
420 }
421 \f
422
423 /* Wrapper function for create_file_handler, so that the caller
424    doesn't have to know implementation details about the use of poll
425    vs. select. */
426 void
427 add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
428 {
429 #ifdef HAVE_POLL
430   struct pollfd fds;
431 #endif
432
433   if (use_poll)
434     {
435 #ifdef HAVE_POLL
436       /* Check to see if poll () is usable. If not, we'll switch to
437          use select. This can happen on systems like
438          m68k-motorola-sys, `poll' cannot be used to wait for `stdin'.
439          On m68k-motorola-sysv, tty's are not stream-based and not
440          `poll'able. */
441       fds.fd = fd;
442       fds.events = POLLIN;
443       if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
444         use_poll = 0;
445 #else
446       internal_error (__FILE__, __LINE__,
447                       "use_poll without HAVE_POLL");
448 #endif /* HAVE_POLL */
449     }
450   if (use_poll)
451     {
452 #ifdef HAVE_POLL
453       create_file_handler (fd, POLLIN, proc, client_data);
454 #else
455       internal_error (__FILE__, __LINE__,
456                       "use_poll without HAVE_POLL");
457 #endif
458     }
459   else
460     create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, proc, client_data);
461 }
462
463 /* Add a file handler/descriptor to the list of descriptors we are
464    interested in.  
465    FD is the file descriptor for the file/stream to be listened to.  
466    For the poll case, MASK is a combination (OR) of
467    POLLIN, POLLRDNORM, POLLRDBAND, POLLPRI, POLLOUT, POLLWRNORM,
468    POLLWRBAND: these are the events we are interested in. If any of them 
469    occurs, proc should be called.
470    For the select case, MASK is a combination of READABLE, WRITABLE, EXCEPTION.
471    PROC is the procedure that will be called when an event occurs for
472    FD.  CLIENT_DATA is the argument to pass to PROC. */
473 static void
474 create_file_handler (int fd, int mask, handler_func * proc, gdb_client_data client_data)
475 {
476   file_handler *file_ptr;
477
478   /* Do we already have a file handler for this file? (We may be
479      changing its associated procedure). */
480   for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
481        file_ptr = file_ptr->next_file)
482     {
483       if (file_ptr->fd == fd)
484         break;
485     }
486
487   /* It is a new file descriptor. Add it to the list. Otherwise, just
488      change the data associated with it. */
489   if (file_ptr == NULL)
490     {
491       file_ptr = (file_handler *) xmalloc (sizeof (file_handler));
492       file_ptr->fd = fd;
493       file_ptr->ready_mask = 0;
494       file_ptr->next_file = gdb_notifier.first_file_handler;
495       gdb_notifier.first_file_handler = file_ptr;
496
497       if (use_poll)
498         {
499 #ifdef HAVE_POLL
500           gdb_notifier.num_fds++;
501           if (gdb_notifier.poll_fds)
502             gdb_notifier.poll_fds =
503               (struct pollfd *) xrealloc (gdb_notifier.poll_fds,
504                                           (gdb_notifier.num_fds
505                                            * sizeof (struct pollfd)));
506           else
507             gdb_notifier.poll_fds =
508               (struct pollfd *) xmalloc (sizeof (struct pollfd));
509           (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd;
510           (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask;
511           (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0;
512 #else
513           internal_error (__FILE__, __LINE__,
514                           "use_poll without HAVE_POLL");
515 #endif /* HAVE_POLL */
516         }
517       else
518         {
519           if (mask & GDB_READABLE)
520             FD_SET (fd, &gdb_notifier.check_masks[0]);
521           else
522             FD_CLR (fd, &gdb_notifier.check_masks[0]);
523
524           if (mask & GDB_WRITABLE)
525             FD_SET (fd, &gdb_notifier.check_masks[1]);
526           else
527             FD_CLR (fd, &gdb_notifier.check_masks[1]);
528
529           if (mask & GDB_EXCEPTION)
530             FD_SET (fd, &gdb_notifier.check_masks[2]);
531           else
532             FD_CLR (fd, &gdb_notifier.check_masks[2]);
533
534           if (gdb_notifier.num_fds <= fd)
535             gdb_notifier.num_fds = fd + 1;
536         }
537     }
538
539   file_ptr->proc = proc;
540   file_ptr->client_data = client_data;
541   file_ptr->mask = mask;
542 }
543
544 /* Remove the file descriptor FD from the list of monitored fd's: 
545    i.e. we don't care anymore about events on the FD. */
546 void
547 delete_file_handler (int fd)
548 {
549   file_handler *file_ptr, *prev_ptr = NULL;
550   int i;
551 #ifdef HAVE_POLL
552   int j;
553   struct pollfd *new_poll_fds;
554 #endif
555
556   /* Find the entry for the given file. */
557
558   for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
559        file_ptr = file_ptr->next_file)
560     {
561       if (file_ptr->fd == fd)
562         break;
563     }
564
565   if (file_ptr == NULL)
566     return;
567
568   if (use_poll)
569     {
570 #ifdef HAVE_POLL
571       /* Create a new poll_fds array by copying every fd's information but the
572          one we want to get rid of. */
573
574       new_poll_fds =
575         (struct pollfd *) xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
576
577       for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
578         {
579           if ((gdb_notifier.poll_fds + i)->fd != fd)
580             {
581               (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd;
582               (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events;
583               (new_poll_fds + j)->revents = (gdb_notifier.poll_fds + i)->revents;
584               j++;
585             }
586         }
587       xfree (gdb_notifier.poll_fds);
588       gdb_notifier.poll_fds = new_poll_fds;
589       gdb_notifier.num_fds--;
590 #else
591       internal_error (__FILE__, __LINE__,
592                       "use_poll without HAVE_POLL");
593 #endif /* HAVE_POLL */
594     }
595   else
596     {
597       if (file_ptr->mask & GDB_READABLE)
598         FD_CLR (fd, &gdb_notifier.check_masks[0]);
599       if (file_ptr->mask & GDB_WRITABLE)
600         FD_CLR (fd, &gdb_notifier.check_masks[1]);
601       if (file_ptr->mask & GDB_EXCEPTION)
602         FD_CLR (fd, &gdb_notifier.check_masks[2]);
603
604       /* Find current max fd. */
605
606       if ((fd + 1) == gdb_notifier.num_fds)
607         {
608           gdb_notifier.num_fds--;
609           for (i = gdb_notifier.num_fds; i; i--)
610             {
611               if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
612                   || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
613                   || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
614                 break;
615             }
616           gdb_notifier.num_fds = i;
617         }
618     }
619
620   /* Deactivate the file descriptor, by clearing its mask, 
621      so that it will not fire again. */
622
623   file_ptr->mask = 0;
624
625   /* Get rid of the file handler in the file handler list. */
626   if (file_ptr == gdb_notifier.first_file_handler)
627     gdb_notifier.first_file_handler = file_ptr->next_file;
628   else
629     {
630       for (prev_ptr = gdb_notifier.first_file_handler;
631            prev_ptr->next_file != file_ptr;
632            prev_ptr = prev_ptr->next_file)
633         ;
634       prev_ptr->next_file = file_ptr->next_file;
635     }
636   xfree (file_ptr);
637 }
638
639 /* Handle the given event by calling the procedure associated to the
640    corresponding file handler.  Called by process_event indirectly,
641    through event_ptr->proc.  EVENT_FILE_DESC is file descriptor of the
642    event in the front of the event queue. */
643 static void
644 handle_file_event (int event_file_desc)
645 {
646   file_handler *file_ptr;
647   int mask;
648 #ifdef HAVE_POLL
649   int error_mask;
650   int error_mask_returned;
651 #endif
652
653   /* Search the file handler list to find one that matches the fd in
654      the event. */
655   for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
656        file_ptr = file_ptr->next_file)
657     {
658       if (file_ptr->fd == event_file_desc)
659         {
660           /* With poll, the ready_mask could have any of three events
661              set to 1: POLLHUP, POLLERR, POLLNVAL. These events cannot
662              be used in the requested event mask (events), but they
663              can be returned in the return mask (revents). We need to
664              check for those event too, and add them to the mask which
665              will be passed to the handler. */
666
667           /* See if the desired events (mask) match the received
668              events (ready_mask). */
669
670           if (use_poll)
671             {
672 #ifdef HAVE_POLL
673               error_mask = POLLHUP | POLLERR | POLLNVAL;
674               mask = (file_ptr->ready_mask & file_ptr->mask) |
675                 (file_ptr->ready_mask & error_mask);
676               error_mask_returned = mask & error_mask;
677
678               if (error_mask_returned != 0)
679                 {
680                   /* Work in progress. We may need to tell somebody what
681                      kind of error we had. */
682                   if (error_mask_returned & POLLHUP)
683                     printf_unfiltered ("Hangup detected on fd %d\n", file_ptr->fd);
684                   if (error_mask_returned & POLLERR)
685                     printf_unfiltered ("Error detected on fd %d\n", file_ptr->fd);
686                   if (error_mask_returned & POLLNVAL)
687                     printf_unfiltered ("Invalid or non-`poll'able fd %d\n", file_ptr->fd);
688                   file_ptr->error = 1;
689                 }
690               else
691                 file_ptr->error = 0;
692 #else
693               internal_error (__FILE__, __LINE__,
694                               "use_poll without HAVE_POLL");
695 #endif /* HAVE_POLL */
696             }
697           else
698             {
699               if (file_ptr->ready_mask & GDB_EXCEPTION)
700                 {
701                   printf_unfiltered ("Exception condition detected on fd %d\n", file_ptr->fd);
702                   file_ptr->error = 1;
703                 }
704               else
705                 file_ptr->error = 0;
706               mask = file_ptr->ready_mask & file_ptr->mask;
707             }
708
709           /* Clear the received events for next time around. */
710           file_ptr->ready_mask = 0;
711
712           /* If there was a match, then call the handler. */
713           if (mask != 0)
714             (*file_ptr->proc) (file_ptr->error, file_ptr->client_data);
715           break;
716         }
717     }
718 }
719
720 /* Called by gdb_do_one_event to wait for new events on the 
721    monitored file descriptors. Queue file events as they are 
722    detected by the poll. 
723    If there are no events, this function will block in the 
724    call to poll.
725    Return -1 if there are no files descriptors to monitor, 
726    otherwise return 0. */
727 static int
728 gdb_wait_for_event (void)
729 {
730   file_handler *file_ptr;
731   gdb_event *file_event_ptr;
732   int num_found = 0;
733   int i;
734
735   /* Make sure all output is done before getting another event. */
736   gdb_flush (gdb_stdout);
737   gdb_flush (gdb_stderr);
738
739   if (gdb_notifier.num_fds == 0)
740     return -1;
741
742   if (use_poll)
743     {
744 #ifdef HAVE_POLL
745       num_found =
746         poll (gdb_notifier.poll_fds,
747               (unsigned long) gdb_notifier.num_fds,
748               gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1);
749
750       /* Don't print anything if we get out of poll because of a
751          signal. */
752       if (num_found == -1 && errno != EINTR)
753         perror_with_name ("Poll");
754 #else
755       internal_error (__FILE__, __LINE__,
756                       "use_poll without HAVE_POLL");
757 #endif /* HAVE_POLL */
758     }
759   else
760     {
761       gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
762       gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
763       gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
764       num_found = select (gdb_notifier.num_fds,
765                           &gdb_notifier.ready_masks[0],
766                           &gdb_notifier.ready_masks[1],
767                           &gdb_notifier.ready_masks[2],
768                           gdb_notifier.timeout_valid
769                           ? &gdb_notifier.select_timeout : NULL);
770
771       /* Clear the masks after an error from select. */
772       if (num_found == -1)
773         {
774           FD_ZERO (&gdb_notifier.ready_masks[0]);
775           FD_ZERO (&gdb_notifier.ready_masks[1]);
776           FD_ZERO (&gdb_notifier.ready_masks[2]);
777           /* Dont print anything is we got a signal, let gdb handle it. */
778           if (errno != EINTR)
779             perror_with_name ("Select");
780         }
781     }
782
783   /* Enqueue all detected file events. */
784
785   if (use_poll)
786     {
787 #ifdef HAVE_POLL
788       for (i = 0; (i < gdb_notifier.num_fds) && (num_found > 0); i++)
789         {
790           if ((gdb_notifier.poll_fds + i)->revents)
791             num_found--;
792           else
793             continue;
794
795           for (file_ptr = gdb_notifier.first_file_handler;
796                file_ptr != NULL;
797                file_ptr = file_ptr->next_file)
798             {
799               if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd)
800                 break;
801             }
802
803           if (file_ptr)
804             {
805               /* Enqueue an event only if this is still a new event for
806                  this fd. */
807               if (file_ptr->ready_mask == 0)
808                 {
809                   file_event_ptr = create_file_event (file_ptr->fd);
810                   async_queue_event (file_event_ptr, TAIL);
811                 }
812             }
813
814           file_ptr->ready_mask = (gdb_notifier.poll_fds + i)->revents;
815         }
816 #else
817       internal_error (__FILE__, __LINE__,
818                       "use_poll without HAVE_POLL");
819 #endif /* HAVE_POLL */
820     }
821   else
822     {
823       for (file_ptr = gdb_notifier.first_file_handler;
824            (file_ptr != NULL) && (num_found > 0);
825            file_ptr = file_ptr->next_file)
826         {
827           int mask = 0;
828
829           if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
830             mask |= GDB_READABLE;
831           if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
832             mask |= GDB_WRITABLE;
833           if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
834             mask |= GDB_EXCEPTION;
835
836           if (!mask)
837             continue;
838           else
839             num_found--;
840
841           /* Enqueue an event only if this is still a new event for
842              this fd. */
843
844           if (file_ptr->ready_mask == 0)
845             {
846               file_event_ptr = create_file_event (file_ptr->fd);
847               async_queue_event (file_event_ptr, TAIL);
848             }
849           file_ptr->ready_mask = mask;
850         }
851     }
852   return 0;
853 }
854 \f
855
856 /* Create an asynchronous handler, allocating memory for it. 
857    Return a pointer to the newly created handler.
858    This pointer will be used to invoke the handler by 
859    invoke_async_signal_handler.
860    PROC is the function to call with CLIENT_DATA argument 
861    whenever the handler is invoked. */
862 async_signal_handler *
863 create_async_signal_handler (sig_handler_func * proc, gdb_client_data client_data)
864 {
865   async_signal_handler *async_handler_ptr;
866
867   async_handler_ptr =
868     (async_signal_handler *) xmalloc (sizeof (async_signal_handler));
869   async_handler_ptr->ready = 0;
870   async_handler_ptr->next_handler = NULL;
871   async_handler_ptr->proc = proc;
872   async_handler_ptr->client_data = client_data;
873   if (sighandler_list.first_handler == NULL)
874     sighandler_list.first_handler = async_handler_ptr;
875   else
876     sighandler_list.last_handler->next_handler = async_handler_ptr;
877   sighandler_list.last_handler = async_handler_ptr;
878   return async_handler_ptr;
879 }
880
881 /* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information will
882    be used when the handlers are invoked, after we have waited for
883    some event.  The caller of this function is the interrupt handler
884    associated with a signal. */
885 void
886 mark_async_signal_handler (async_signal_handler * async_handler_ptr)
887 {
888   ((async_signal_handler *) async_handler_ptr)->ready = 1;
889   async_handler_ready = 1;
890 }
891
892 /* Call all the handlers that are ready. */
893 static void
894 invoke_async_signal_handler (void)
895 {
896   async_signal_handler *async_handler_ptr;
897
898   if (async_handler_ready == 0)
899     return;
900   async_handler_ready = 0;
901
902   /* Invoke ready handlers. */
903
904   while (1)
905     {
906       for (async_handler_ptr = sighandler_list.first_handler;
907            async_handler_ptr != NULL;
908            async_handler_ptr = async_handler_ptr->next_handler)
909         {
910           if (async_handler_ptr->ready)
911             break;
912         }
913       if (async_handler_ptr == NULL)
914         break;
915       async_handler_ptr->ready = 0;
916       (*async_handler_ptr->proc) (async_handler_ptr->client_data);
917     }
918
919   return;
920 }
921
922 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR). 
923    Free the space allocated for it.  */
924 void
925 delete_async_signal_handler (async_signal_handler ** async_handler_ptr)
926 {
927   async_signal_handler *prev_ptr;
928
929   if (sighandler_list.first_handler == (*async_handler_ptr))
930     {
931       sighandler_list.first_handler = (*async_handler_ptr)->next_handler;
932       if (sighandler_list.first_handler == NULL)
933         sighandler_list.last_handler = NULL;
934     }
935   else
936     {
937       prev_ptr = sighandler_list.first_handler;
938       while (prev_ptr->next_handler != (*async_handler_ptr) && prev_ptr)
939         prev_ptr = prev_ptr->next_handler;
940       prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
941       if (sighandler_list.last_handler == (*async_handler_ptr))
942         sighandler_list.last_handler = prev_ptr;
943     }
944   xfree ((*async_handler_ptr));
945   (*async_handler_ptr) = NULL;
946 }
947
948 /* Is it necessary to call invoke_async_signal_handler? */
949 static int
950 check_async_ready (void)
951 {
952   return async_handler_ready;
953 }
954
955 /* Create a timer that will expire in MILLISECONDS from now. When the
956    timer is ready, PROC will be executed. At creation, the timer is
957    aded to the timers queue.  This queue is kept sorted in order of
958    increasing timers. Return a handle to the timer struct. */
959 int
960 create_timer (int milliseconds, timer_handler_func * proc, gdb_client_data client_data)
961 {
962   struct gdb_timer *timer_ptr, *timer_index, *prev_timer;
963   struct timeval time_now, delta;
964
965   /* compute seconds */
966   delta.tv_sec = milliseconds / 1000;
967   /* compute microseconds */
968   delta.tv_usec = (milliseconds % 1000) * 1000;
969
970   gettimeofday (&time_now, NULL);
971
972   timer_ptr = (struct gdb_timer *) xmalloc (sizeof (gdb_timer));
973   timer_ptr->when.tv_sec = time_now.tv_sec + delta.tv_sec;
974   timer_ptr->when.tv_usec = time_now.tv_usec + delta.tv_usec;
975   /* carry? */
976   if (timer_ptr->when.tv_usec >= 1000000)
977     {
978       timer_ptr->when.tv_sec += 1;
979       timer_ptr->when.tv_usec -= 1000000;
980     }
981   timer_ptr->proc = proc;
982   timer_ptr->client_data = client_data;
983   timer_list.num_timers++;
984   timer_ptr->timer_id = timer_list.num_timers;
985
986   /* Now add the timer to the timer queue, making sure it is sorted in
987      increasing order of expiration. */
988
989   for (timer_index = timer_list.first_timer;
990        timer_index != NULL;
991        timer_index = timer_index->next)
992     {
993       /* If the seconds field is greater or if it is the same, but the
994          microsecond field is greater. */
995       if ((timer_index->when.tv_sec > timer_ptr->when.tv_sec) ||
996           ((timer_index->when.tv_sec == timer_ptr->when.tv_sec)
997            && (timer_index->when.tv_usec > timer_ptr->when.tv_usec)))
998         break;
999     }
1000
1001   if (timer_index == timer_list.first_timer)
1002     {
1003       timer_ptr->next = timer_list.first_timer;
1004       timer_list.first_timer = timer_ptr;
1005
1006     }
1007   else
1008     {
1009       for (prev_timer = timer_list.first_timer;
1010            prev_timer->next != timer_index;
1011            prev_timer = prev_timer->next)
1012         ;
1013
1014       prev_timer->next = timer_ptr;
1015       timer_ptr->next = timer_index;
1016     }
1017
1018   gdb_notifier.timeout_valid = 0;
1019   return timer_ptr->timer_id;
1020 }
1021
1022 /* There is a chance that the creator of the timer wants to get rid of
1023    it before it expires. */
1024 void
1025 delete_timer (int id)
1026 {
1027   struct gdb_timer *timer_ptr, *prev_timer = NULL;
1028
1029   /* Find the entry for the given timer. */
1030
1031   for (timer_ptr = timer_list.first_timer; timer_ptr != NULL;
1032        timer_ptr = timer_ptr->next)
1033     {
1034       if (timer_ptr->timer_id == id)
1035         break;
1036     }
1037
1038   if (timer_ptr == NULL)
1039     return;
1040   /* Get rid of the timer in the timer list. */
1041   if (timer_ptr == timer_list.first_timer)
1042     timer_list.first_timer = timer_ptr->next;
1043   else
1044     {
1045       for (prev_timer = timer_list.first_timer;
1046            prev_timer->next != timer_ptr;
1047            prev_timer = prev_timer->next)
1048         ;
1049       prev_timer->next = timer_ptr->next;
1050     }
1051   xfree (timer_ptr);
1052
1053   gdb_notifier.timeout_valid = 0;
1054 }
1055
1056 /* When a timer event is put on the event queue, it will be handled by
1057    this function.  Just call the assiciated procedure and delete the
1058    timer event from the event queue. Repeat this for each timer that
1059    has expired. */
1060 static void
1061 handle_timer_event (int dummy)
1062 {
1063   struct timeval time_now;
1064   struct gdb_timer *timer_ptr, *saved_timer;
1065
1066   gettimeofday (&time_now, NULL);
1067   timer_ptr = timer_list.first_timer;
1068
1069   while (timer_ptr != NULL)
1070     {
1071       if ((timer_ptr->when.tv_sec > time_now.tv_sec) ||
1072           ((timer_ptr->when.tv_sec == time_now.tv_sec) &&
1073            (timer_ptr->when.tv_usec > time_now.tv_usec)))
1074         break;
1075
1076       /* Get rid of the timer from the beginning of the list. */
1077       timer_list.first_timer = timer_ptr->next;
1078       saved_timer = timer_ptr;
1079       timer_ptr = timer_ptr->next;
1080       /* Call the procedure associated with that timer. */
1081       (*saved_timer->proc) (saved_timer->client_data);
1082       xfree (saved_timer);
1083     }
1084
1085   gdb_notifier.timeout_valid = 0;
1086 }
1087
1088 /* Check whether any timers in the timers queue are ready. If at least
1089    one timer is ready, stick an event onto the event queue.  Even in
1090    case more than one timer is ready, one event is enough, because the
1091    handle_timer_event() will go through the timers list and call the
1092    procedures associated with all that have expired. Update the
1093    timeout for the select() or poll() as well. */
1094 static void
1095 poll_timers (void)
1096 {
1097   struct timeval time_now, delta;
1098   gdb_event *event_ptr;
1099
1100   if (timer_list.first_timer != NULL)
1101     {
1102       gettimeofday (&time_now, NULL);
1103       delta.tv_sec = timer_list.first_timer->when.tv_sec - time_now.tv_sec;
1104       delta.tv_usec = timer_list.first_timer->when.tv_usec - time_now.tv_usec;
1105       /* borrow? */
1106       if (delta.tv_usec < 0)
1107         {
1108           delta.tv_sec -= 1;
1109           delta.tv_usec += 1000000;
1110         }
1111
1112       /* Oops it expired already. Tell select / poll to return
1113          immediately. (Cannot simply test if delta.tv_sec is negative
1114          because time_t might be unsigned.)  */
1115       if (timer_list.first_timer->when.tv_sec < time_now.tv_sec
1116           || (timer_list.first_timer->when.tv_sec == time_now.tv_sec
1117               && timer_list.first_timer->when.tv_usec < time_now.tv_usec))
1118         {
1119           delta.tv_sec = 0;
1120           delta.tv_usec = 0;
1121         }
1122
1123       if (delta.tv_sec == 0 && delta.tv_usec == 0)
1124         {
1125           event_ptr = (gdb_event *) xmalloc (sizeof (gdb_event));
1126           event_ptr->proc = handle_timer_event;
1127           event_ptr->fd = timer_list.first_timer->timer_id;
1128           async_queue_event (event_ptr, TAIL);
1129         }
1130
1131       /* Now we need to update the timeout for select/ poll, because we
1132          don't want to sit there while this timer is expiring. */
1133       if (use_poll)
1134         {
1135 #ifdef HAVE_POLL
1136           gdb_notifier.poll_timeout = delta.tv_sec * 1000;
1137 #else
1138           internal_error (__FILE__, __LINE__,
1139                           "use_poll without HAVE_POLL");
1140 #endif /* HAVE_POLL */
1141         }
1142       else
1143         {
1144           gdb_notifier.select_timeout.tv_sec = delta.tv_sec;
1145           gdb_notifier.select_timeout.tv_usec = delta.tv_usec;
1146         }
1147       gdb_notifier.timeout_valid = 1;
1148     }
1149   else
1150     gdb_notifier.timeout_valid = 0;
1151 }