diff options
| author | Robert Pluim | 2022-05-04 17:09:07 +0200 |
|---|---|---|
| committer | Robert Pluim | 2022-05-05 19:30:15 +0200 |
| commit | 2087e5eb2bf6cfefe74b6b589c215c2144ed9fb0 (patch) | |
| tree | 27b4865f176452535ec02666b16331ecf44445d7 /src/syspoll.h | |
| parent | aebff74af27157b60a0d6549be718d85a809b985 (diff) | |
| download | emacs-feature/more-fds.tar.gz emacs-feature/more-fds.zip | |
Allow the use of poll instead of selectfeature/more-fds
Increase the maximum number of open files allowed to
10 x FD_SETSIZE (which is what poll is limited to on macOS).
* configure.ac (--with-poll): New option, default off, for requesting
'poll' support. Check for "sys/poll.h" header.
(USE_POLL): New variable.
(EMACS_CONFIG_FEATURES): Add USE_POLL.
* etc/NEWS: Document --with-poll.
* src/sysselect.h: New define EMACS_MAX_FD, defaulting to FD_SETSIZE,
for the maximum number of file descriptors Emacs can use.
* src/process.c:
* src/sysdep.c:
* src/nsterm.m (ns_select_1):
(applicationDidFinishLaunching): Use EMACS_MAX_FD instead of
FD_SETSIZE everywhere.
* src/syspoll.h (SYSPOLL_H): New file for definitions related to use
of 'poll'.
* src/sysselect.h [USE_POLL]: Set EMACS_MAX_FD to 10 x FD_SETSIZE.
(emacs_fd_set) [USE_POLL]: New type, used for bitsets of file
descriptors.
(FD_CLR, FD_ISSET, FD_SET, FD_ZERO) [USE_POLL]: Macros for
manipulating bitsets.
[USE_POLL]: Include "syspoll.h".
* src/process.c (fd_sets_to_pollfds) [USE_POLL]: New function.
Converts two 'emacs_fd_set' to an array of 'struct pollfd'
(pollfds_to_fd_sets) [USE_POLL]: New function.
Converts from an array of 'struct pollfd' to two 'emacs_fd_set'.
(timespec_to_timeout) [USE_POLL]: New function, converts a 'struct
timespec' to a timeout in milliseconds.
(emacs_pselect) [USE_POLL]: Replacement for 'pselect' that calls
'poll' and does the appropriate conversions. Does not support
sigmask.
Diffstat (limited to 'src/syspoll.h')
| -rw-r--r-- | src/syspoll.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/syspoll.h b/src/syspoll.h new file mode 100644 index 00000000000..d133794fb13 --- /dev/null +++ b/src/syspoll.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | /* syspoll.h - System-dependent definitions for the poll function. | ||
| 2 | Copyright (C) 2022 Free Software Foundation, Inc. | ||
| 3 | |||
| 4 | This file is part of GNU Emacs. | ||
| 5 | |||
| 6 | GNU Emacs is free software: you can redistribute it and/or modify | ||
| 7 | it under the terms of the GNU General Public License as published by | ||
| 8 | the Free Software Foundation, either version 3 of the License, or (at | ||
| 9 | your option) any later version. | ||
| 10 | |||
| 11 | GNU Emacs is distributed in the hope that it will be useful, | ||
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | GNU General Public License for more details. | ||
| 15 | |||
| 16 | You should have received a copy of the GNU General Public License | ||
| 17 | along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ | ||
| 18 | |||
| 19 | #ifndef SYSPOLL_H | ||
| 20 | #define SYSPOLL_H 1 | ||
| 21 | |||
| 22 | #if !defined (DOS_NT) && !defined (WINDOWSNT) | ||
| 23 | #include <sys/poll.h> | ||
| 24 | |||
| 25 | extern int fd_sets_to_pollfds (emacs_fd_set *, emacs_fd_set *, int); | ||
| 26 | extern void pollfds_to_fd_sets (emacs_fd_set *, emacs_fd_set *, int); | ||
| 27 | extern int timespec_to_timeout (const struct timespec *); | ||
| 28 | extern int emacs_pselect (int, emacs_fd_set *, emacs_fd_set *, | ||
| 29 | emacs_fd_set *, const struct timespec *, | ||
| 30 | const sigset_t *); | ||
| 31 | #endif | ||
| 32 | #endif | ||