mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
Events: use eventfd() instead of syscall(SYS_eventfd) if possible.
This fixes --with-file-aio support on systems that lack eventfd() syscall, notably aarch64 Linux. The syscall(SYS_eventfd) may still be necessary on systems that have eventfd() syscall in the kernel but lack it in glibc, e.g. as seen in the current CentOS 5 release.
This commit is contained in:
@@ -193,10 +193,6 @@ ngx_module_t ngx_epoll_module = {
|
||||
* We call io_setup(), io_destroy() io_submit(), and io_getevents() directly
|
||||
* as syscalls instead of libaio usage, because the library header file
|
||||
* supports eventfd() since 0.3.107 version only.
|
||||
*
|
||||
* Also we do not use eventfd() in glibc, because glibc supports it
|
||||
* since 2.8 version and glibc maps two syscalls eventfd() and eventfd2()
|
||||
* into single eventfd() function with different number of parameters.
|
||||
*/
|
||||
|
||||
static int
|
||||
@@ -227,7 +223,11 @@ ngx_epoll_aio_init(ngx_cycle_t *cycle, ngx_epoll_conf_t *epcf)
|
||||
int n;
|
||||
struct epoll_event ee;
|
||||
|
||||
#if (NGX_HAVE_SYS_EVENTFD_H)
|
||||
ngx_eventfd = eventfd(0, 0);
|
||||
#else
|
||||
ngx_eventfd = syscall(SYS_eventfd, 0);
|
||||
#endif
|
||||
|
||||
if (ngx_eventfd == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
|
||||
@@ -94,6 +94,9 @@ extern ssize_t sendfile(int s, int fd, int32_t *offset, size_t size);
|
||||
|
||||
|
||||
#if (NGX_HAVE_FILE_AIO)
|
||||
#if (NGX_HAVE_SYS_EVENTFD_H)
|
||||
#include <sys/eventfd.h>
|
||||
#endif
|
||||
#include <sys/syscall.h>
|
||||
#include <linux/aio_abi.h>
|
||||
typedef struct iocb ngx_aiocb_t;
|
||||
|
||||
Reference in New Issue
Block a user