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