/* Serial interface for a selectable event. Copyright (C) 2016-2023 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef SER_EVENT_H #define SER_EVENT_H /* This is used to be able to signal the event loop (or any other select/poll) of events, in a race-free manner. For example, a signal handler can defer non-async-signal-safe work to the event loop, by having the signal handler set a struct serial_event object, and having the event loop wait for that same object to the readable. Once readable, the event loop breaks out of select/poll and calls a registered callback that does the deferred work. */ struct serial_event; /* Make a new serial_event object. */ struct serial_event *make_serial_event (void); /* Return the FD that can be used by select/poll to wait for the event. The only valid operation on this object is to wait until it is readable. */ extern int serial_event_fd (struct serial_event *event); /* Set the event. This signals the file descriptor returned by serial_event_fd as readable. */ extern void serial_event_set (struct serial_event *event); /* Clear the event. The file descriptor returned by serial_event_fd is not longer readable after this, until a new serial_event_set call is made. */ extern void serial_event_clear (struct serial_event *event); #endif