27 #if defined (HAVE_POLL_H) 29 #elif defined (HAVE_SYS_POLL_H) 34 #include <sys/types.h> 43 #define GDB_READABLE (1<<1) 44 #define GDB_WRITABLE (1<<2) 45 #define GDB_EXCEPTION (1<<3) 215 std::chrono::steady_clock::time_point
when;
297 static int event_source_head = 0;
298 const int number_of_sources = 3;
309 for (current = 0; current < number_of_sources; current++)
313 switch (event_source_head)
330 "unexpected event_source_head %d",
335 if (event_source_head == number_of_sources)
336 event_source_head = 0;
393 (*after_char_processing_hook) ();
429 if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
433 _(
"use_poll without HAVE_POLL"));
442 _(
"use_poll without HAVE_POLL"));
472 for (file_ptr =
gdb_notifier.first_file_handler; file_ptr != NULL;
475 if (file_ptr->
fd == fd)
481 if (file_ptr == NULL)
497 * sizeof (
struct pollfd)));
500 XNEW (
struct pollfd);
506 _(
"use_poll without HAVE_POLL"));
533 file_ptr->
mask = mask;
570 struct pollfd *new_poll_fds;
575 for (file_ptr =
gdb_notifier.first_file_handler; file_ptr != NULL;
578 if (file_ptr->
fd == fd)
582 if (file_ptr == NULL)
591 new_poll_fds = (
struct pollfd *)
598 (new_poll_fds + j)->fd = (
gdb_notifier.poll_fds + i)->fd;
599 (new_poll_fds + j)->events = (
gdb_notifier.poll_fds + i)->events;
600 (new_poll_fds + j)->revents
610 _(
"use_poll without HAVE_POLL"));
696 error_mask = POLLHUP | POLLERR | POLLNVAL;
697 mask = ready_mask & (file_ptr->
mask | error_mask);
699 if ((mask & (POLLERR | POLLNVAL)) != 0)
715 _(
"use_poll without HAVE_POLL"));
723 "on fd %d\n"), file_ptr->
fd);
728 mask = ready_mask & file_ptr->
mask;
776 if (num_found == -1 && errno != EINTR)
780 _(
"use_poll without HAVE_POLL"));
786 struct timeval *timeout_p;
863 _(
"use_poll without HAVE_POLL"));
904 async_handler_ptr->
ready = 0;
913 return async_handler_ptr;
923 async_handler_ptr->
ready = 1;
932 async_handler_ptr->
ready = 0;
940 return async_handler_ptr->
ready;
962 async_handler_ptr != NULL;
965 if (async_handler_ptr->
ready)
968 if (async_handler_ptr == NULL)
971 async_handler_ptr->
ready = 0;
997 while (prev_ptr && prev_ptr->
next_handler != (*async_handler_ptr))
1004 xfree ((*async_handler_ptr));
1005 (*async_handler_ptr) = NULL;
1038 async_handler_ptr->
ready = 1;
1046 async_handler_ptr->
ready = 0;
1058 async_handler_ptr != NULL;
1061 if (async_handler_ptr->
ready)
1063 async_handler_ptr->
ready = 0;
1082 = (*async_handler_ptr)->next_handler;
1089 while (prev_ptr && prev_ptr->
next_handler != *async_handler_ptr)
1096 xfree (*async_handler_ptr);
1097 *async_handler_ptr = NULL;
1110 struct gdb_timer *timer_ptr, *timer_index, *prev_timer;
1112 steady_clock::time_point time_now = steady_clock::now ();
1115 timer_ptr->
when = time_now + milliseconds (ms);
1125 timer_index != NULL;
1126 timer_index = timer_index->
next)
1128 if (timer_index->
when > timer_ptr->
when)
1141 prev_timer->
next != timer_index;
1142 prev_timer = prev_timer->
next)
1145 prev_timer->
next = timer_ptr;
1146 timer_ptr->
next = timer_index;
1158 struct gdb_timer *timer_ptr, *prev_timer = NULL;
1162 for (timer_ptr =
timer_list.first_timer; timer_ptr != NULL;
1163 timer_ptr = timer_ptr->
next)
1169 if (timer_ptr == NULL)
1177 prev_timer->
next != timer_ptr;
1178 prev_timer = prev_timer->
next)
1180 prev_timer->
next = timer_ptr->
next;
1189 template<
typename Duration>
1190 static struct timeval
1194 seconds sec = duration_cast<seconds> (d);
1195 microseconds msec = duration_cast<microseconds> (d - sec);
1198 tv.tv_sec = sec.count ();
1199 tv.tv_usec = msec.count ();
1212 steady_clock::time_point time_now = steady_clock::now ();
1213 struct timeval timeout;
1219 timeout.tv_usec = 0;
1223 steady_clock::duration d =
timer_list.first_timer->when - time_now;
1234 _(
"use_poll without HAVE_POLL"));
static struct @51 gdb_notifier
void start_event_loop(void)
void(* after_char_processing_hook)(void)
async_event_handler_func * proc
void clear_async_signal_handler(async_signal_handler *async_handler_ptr)
void() handler_func(int, gdb_client_data)
static void async_signals_handler(int error, gdb_client_data client_data)
static void handle_file_event(file_handler *file_ptr, int ready_mask)
async_signal_handler * last_handler
file_handler * next_file_handler
void async_enable_stdin(void)
void mark_async_signal_handler(async_signal_handler *async_handler_ptr)
struct gdb_timer * first_timer
void * memset(T *s, int c, size_t n)=delete
void internal_error(const char *file, int line, const char *fmt,...)
void delete_async_event_handler(async_event_handler **async_handler_ptr)
void() event_handler_func(event_data)
struct file_handler * next_file
static struct timeval duration_cast_timeval(const Duration &d)
void mark_async_event_handler(async_event_handler *async_handler_ptr)
int create_timer(int ms, timer_handler_func *proc, gdb_client_data client_data)
static int update_wait_timeout(void)
static struct @52 timer_list
static struct @54 async_event_handler_list
void add_file_handler(int fd, handler_func *proc, gdb_client_data client_data)
struct timeval select_timeout
static file_handler * get_next_file_handler_to_handle_and_advance(void)
#define CATCH(EXCEPTION, MASK)
file_handler * first_file_handler
void() sig_handler_func(gdb_client_data)
int async_signal_handler_is_marked(async_signal_handler *async_handler_ptr)
enum prompt_state prompt_state
void initialize_async_signal_handlers(void)
void exception_print(struct ui_file *file, struct gdb_exception e)
int serial_event_fd(struct serial_event *event)
static unsigned char use_poll
async_event_handler * create_async_event_handler(async_event_handler_func *proc, gdb_client_data client_data)
void() timer_handler_func(gdb_client_data)
static int gdb_wait_for_event(int)
static struct serial_event * async_signal_handlers_serial_event
struct gdb_event * gdb_event_p
event_handler_func * proc
async_signal_handler * create_async_signal_handler(sig_handler_func *proc, gdb_client_data client_data)
int gdb_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
static int poll_timers(void)
void printf_unfiltered(const char *format,...)
struct file_handler file_handler
struct async_signal_handler * next_handler
static struct @53 sighandler_list
std::chrono::steady_clock::time_point when
PTR xrealloc(PTR ptr, size_t size)
static void create_file_handler(int fd, int mask, handler_func *proc, gdb_client_data client_data)
void serial_event_clear(struct serial_event *event)
void void void void void void void void void perror_with_name(const char *string) ATTRIBUTE_NORETURN
gdb_client_data client_data
struct async_event_handler * next_handler
int gdb_do_one_event(void)
struct serial_event * make_serial_event(void)
static int invoke_async_signal_handlers(void)
async_signal_handler * first_handler
struct async_signal_handler async_signal_handler
gdb_client_data client_data
void delete_timer(int id)
void serial_event_set(struct serial_event *event)
union event_data event_data
void clear_async_event_handler(async_event_handler *async_handler_ptr)
void observer_notify_command_error(void)
void() async_event_handler_func(gdb_client_data)
timer_handler_func * proc
void gdb_flush(struct ui_file *file)
static int check_async_event_handlers(void)
void delete_async_signal_handler(async_signal_handler **async_handler_ptr)
gdb_client_data client_data
void error(const char *fmt,...)
void delete_file_handler(int fd)
gdb_client_data client_data
struct async_event_handler async_event_handler