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