aboutsummaryrefslogtreecommitdiff
path: root/src/os
Commit message (Collapse)AuthorAge
* Use NULL instead of 0 for null pointer constant.Andrew Clayton2025-06-21
| | | | | | | | | | | | | | | There were a few random places where 0 was being used as a null pointer constant. We have a NULL macro for this very purpose, use it. There is also some interest in actually deprecating the use of 0 as a null pointer constant in C. This was found with -Wzero-as-null-pointer-constant which was enabled for C in GCC 15 (not enabled with Wall or Wextra... yet). Link: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117059>
* Core: fix build without libcrypt.Piotr Sikora2025-02-18
| | | | | | libcrypt is no longer part of glibc, so it might not be available. Signed-off-by: Piotr Sikora <piotr@aviatrix.com>
* On DragonFly BSD 5.8+, TCP_KEEPIDLE and TCP_KEEPINTVL are in secs.Andy Pan2024-11-19
|
* Detect cache line size at runtime on macOS.Piotr Sikora2024-02-26
| | | | | | | Notably, Apple Silicon CPUs have 128 byte cache line size, which is twice the default configured for generic aarch64. Signed-off-by: Piotr Sikora <piotr@aviatrix.com>
* Win32: fixed unique file index calculations.Piotr Sikora2024-02-26
| | | | | | The old code was breaking strict aliasing rules. Signed-off-by: Piotr Sikora <piotr@aviatrix.com>
* AIO operations now add timers (ticket #2162).Maxim Dounin2024-01-29
| | | | | | | | | | | | Each AIO (thread IO) operation being run is now accompanied with 1-minute timer. This timer prevents unexpected shutdown of the worker process while an AIO operation is running, and logs an alert if the operation is running for too long. This fixes "open socket left" alerts during worker processes shutdown due to pending AIO (or thread IO) operations while corresponding requests have no timers. In particular, such errors were observed while reading cache headers (ticket #2162), and with worker_shutdown_timeout.
* Silenced complaints about socket leaks on forced termination.Maxim Dounin2024-01-29
| | | | | | | | | | | When graceful shutdown was requested, and then nginx was forced to do fast shutdown, it used to (incorrectly) complain about open sockets left in connections which weren't yet closed when fast shutdown was requested. Fix is to avoid complaining about open sockets when fast shutdown was requested after graceful one. Abnormal termination, if requested with the WINCH signal, can still happen though.
* Win32: extended ngx_random() range to 0x7fffffff.J Carter2023-12-09
| | | | | | | | rand() is used on win32. RAND_MAX is implementation defined. win32's is 0x7fff. Existing uses of ngx_random() rely upon 0x7fffffff range provided by POSIX implementations of random().
* QUIC: path MTU discovery.Roman Arutyunyan2023-08-14
| | | | | MTU selection starts by doubling the initial MTU until the first failure. Then binary search is used to find the path MTU.
* Merged with the default branch.Sergey Kandaurov2023-03-29
|\
| * Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().Maxim Dounin2023-02-23
| | | | | | | | | | This fixes potentially incorrect cache size calculations and non-working "min_free" when using cache in directories with non-ASCII names.
| * Win32: removed attempt to use a drive letter in ngx_fs_bsize().Maxim Dounin2023-02-23
| | | | | | | | | | | | | | | | | | | | Just a drive letter might not correctly represent file system being used, notably when using symlinks (as created by "mklink /d"). As such, instead of trying to call GetDiskFreeSpace() with just a drive letter, we now always use GetDiskFreeSpace() with full path. Further, it looks like the code to use just a drive letter never worked, since it tried to test name[2] instead of name[1] to be ':'.
| * Win32: non-ASCII names support in ngx_open_tempfile().Maxim Dounin2023-02-23
| | | | | | | | | | This makes it possible to use temporary directories with non-ASCII characters, either explicitly or via a prefix with non-ASCII characters in it.
| * Win32: non-ASCII names support in ngx_rename_file().Maxim Dounin2023-02-23
| | | | | | | | | | This makes it possible to upload files with non-ASCII characters when using the dav module (ticket #1433).
| * Win32: non-ASCII names support in ngx_delete_file().Maxim Dounin2023-02-23
| | | | | | | | | | This makes it possible to delete files with non-ASCII characters when using the dav module (ticket #1433).
| * Win32: reworked ngx_win32_rename_file() to use nginx wrappers.Maxim Dounin2023-02-23
| | | | | | | | | | | | | | | | This ensures that ngx_win32_rename_file() will support non-ASCII names when supported by the wrappers. Notably, this is used by PUT requests in the dav module when overwriting existing files with non-ASCII names (ticket #1433).
| * Win32: reworked ngx_win32_rename_file() to check errors.Maxim Dounin2023-02-23
| | | | | | | | | | | | | | | | Previously, ngx_win32_rename_file() retried on all errors returned by MoveFile() to a temporary name. It only make sense, however, to retry when the destination file already exists, similarly to the condition when ngx_win32_rename_file() is called. Retrying on other errors is meaningless and might result in an infinite loop.
| * Win32: non-ASCII directory names support in ngx_delete_dir().Maxim Dounin2023-02-23
| | | | | | | | | | This makes it possible to delete directories with non-ASCII characters when using the dav module (ticket #1433).
| * Win32: non-ASCII directory names support in ngx_create_dir().Maxim Dounin2023-02-23
| | | | | | | | | | | | | | | | | | | | | | | | This makes it possible to create directories under prefix with non-ASCII characters, as well as makes it possible to create directories with non-ASCII characters when using the dav module (ticket #1433). To ensure that the dav module operations are restricted similarly to other file operations (in particular, short names are not allowed), the ngx_win32_check_filename() function is used. It improved to support checking of just dirname, and now can be used to check paths when creating files or directories.
| * Win32: non-ASCII directory names support in ngx_getcwd().Maxim Dounin2023-02-23
| | | | | | | | | | This makes it possible to start nginx without a prefix explicitly set in a directory with non-ASCII characters in it.
| * Win32: non-ASCII names support in "include" with wildcards.Maxim Dounin2023-02-23
| | | | | | | | | | Notably, ngx_open_glob() now supports opening directories with non-ASCII characters, and pathnames returned by ngx_read_glob() are converted to UTF-8.
| * Win32: non-ASCII names support in autoindex (ticket #458).Maxim Dounin2023-02-23
| | | | | | | | | | | | Notably, ngx_open_dir() now supports opening directories with non-ASCII characters, and directory entries returned by ngx_read_dir() are properly converted to UTF-8.
* | Merged with the default branch.Sergey Kandaurov2023-01-02
|\|
| * Style.BullerDu2022-12-16
| |
* | Merged with the default branch.Sergey Kandaurov2022-12-15
|\|
| * Win32: event flags handling edge cases in ngx_wsarecv().Maxim Dounin2022-12-01
| | | | | | | | | | | | | | Fixed event flags handling edge cases in ngx_wsarecv() and ngx_wsarecv_chain(), notably to always reset rev->ready in case of errors (which wasn't the case after ngx_socket_nread() errors), and after EOF (rev->ready was not cleared if due to a misconfiguration a zero-sized buffer was used for reading).
| * Fixed segfault when switching off master process during upgrade.Maxim Dounin2022-11-23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Binary upgrades are not supported without master process, but it is, however, possible, that nginx running with master process is asked to upgrade binary, and the configuration file as available on disk at this time includes "master_process off;". If this happens, listening sockets inherited from the previous binary will have ls[i].previous set. But the old cycle on initial process startup, including startup after binary upgrade, is destroyed by ngx_init_cycle() once configuration parsing is complete. As a result, an attempt to dereference ls[i].previous in ngx_event_process_init() accesses already freed memory. Fix is to avoid looking into ls[i].previous if the old cycle is already freed. With this change it is also no longer needed to clear ls[i].previous in worker processes, so the relevant code was removed.
| * Process events posted by ngx_close_idle_connections() immediately.Roman Arutyunyan2022-11-18
| | | | | | | | | | | | Previously, if an event was posted by a read event handler, called by ngx_close_idle_connections(), that event was not processed until the next event loop iteration, which could happen after a timeout.
* | Added shutdown macros for win32 required for QUIC.Sergey Kandaurov2022-11-22
| |
* | Merged with the default branch.Sergey Kandaurov2022-10-20
|\|
| * Win32: disabled C4306 warnings with MSVC.Maxim Dounin2022-09-07
| | | | | | | | | | | | | | | | | | Multiple C4306 warnings (conversion from 'type1' to 'type2' of greater size) appear during 64-bit compilation with MSVC 2010 (and older) due to extensively used constructs like "(void *) -1", so they were disabled. In newer MSVC versions C4306 warnings were replaced with C4312 ones, and these are not generated for such trivial type casts.
| * Win32: removed misleading comment about warnings being disabled.Maxim Dounin2022-09-07
| | | | | | | | Warnings being disabled are not only from the "-W4" level since e4590dfd97ff.
* | Merged with the default branch.Sergey Kandaurov2022-07-26
|\|
| * Events: fixed EPOLLRDHUP with FIONREAD (ticket #2367).Maxim Dounin2022-07-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When reading exactly rev->available bytes, rev->available might become 0 after FIONREAD usage introduction in efd71d49bde0. On the next call of ngx_readv_chain() on systems with EPOLLRDHUP this resulted in return without any actions, that is, with rev->ready set, and this in turn resulted in no timers set in event pipe, leading to socket leaks. Fix is to reset rev->ready in ngx_readv_chain() when returning due to rev->available being 0 with EPOLLRDHUP, much like it is already done in ngx_unix_recv(). This ensures that if rev->available will become 0, on systems with EPOLLRDHUP support appropriate EPOLLRDHUP-specific handling will happen on the next ngx_readv_chain() call. While here, also synced ngx_readv_chain() to match ngx_unix_recv() and reset rev->ready when returning due to rev->available being 0 with kqueue. This is mostly cosmetic change, as rev->ready is anyway reset when rev->available is set to 0.
* | Merged with the default branch.Sergey Kandaurov2022-06-22
|\|
| * Fixed runtime handling of systems without EPOLLRDHUP support.Marcus Ball2022-05-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 7583:efd71d49bde0 (nginx 1.17.5) along with introduction of the ioctl(FIONREAD) support proper handling of systems without EPOLLRDHUP support in the kernel (but with EPOLLRDHUP in headers) was broken. Before the change, rev->available was never set to 0 unless ngx_use_epoll_rdhup was also set (that is, runtime test for EPOLLRDHUP introduced in 6536:f7849bfb6d21 succeeded). After the change, rev->available might reach 0 on systems without runtime EPOLLRDHUP support, stopping further reading in ngx_readv_chain() and ngx_unix_recv(). And, if EOF happened to be already reported along with the last event, it is not reported again by epoll_wait(), leading to connection hangs and timeouts on such systems. This affects Linux kernels before 2.6.17 if nginx was compiled with newer headers, and, more importantly, emulation layers, such as DigitalOcean's App Platform's / gVisor's epoll emulation layer. Fix is to explicitly check ngx_use_epoll_rdhup before the corresponding rev->pending_eof tests in ngx_readv_chain() and ngx_unix_recv().
| * Core: added autotest for UDP segmentation offloading.Vladimir Homutov2022-01-26
| |
| * Core: added function for local source address cmsg.Vladimir Homutov2022-01-25
| |
| * Core: made the ngx_sendmsg() function non-static.Vladimir Homutov2022-01-25
| | | | | | | | | | The NGX_HAVE_ADDRINFO_CMSG macro is defined when at least one of methods to deal with corresponding control message is available.
* | QUIC: fixed macro style.Vladimir Homutov2022-01-25
| |
* | Merged with the default branch.Sergey Kandaurov2021-12-29
|\|
| * Support for sendfile(SF_NOCACHE).Maxim Dounin2021-12-27
| | | | | | | | | | | | The SF_NOCACHE flag, introduced in FreeBSD 11 along with the new non-blocking sendfile() implementation by glebius@, makes it possible to use sendfile() along with the "directio" directive.
| * Simplified sendfile(SF_NODISKIO) usage.Maxim Dounin2021-12-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Starting with FreeBSD 11, there is no need to use AIO operations to preload data into cache for sendfile(SF_NODISKIO) to work. Instead, sendfile() handles non-blocking loading data from disk by itself. It still can, however, return EBUSY if a page is already being loaded (for example, by a different process). If this happens, we now post an event for the next event loop iteration, so sendfile() is retried "after a short period", as manpage recommends. The limit of the number of EBUSY tolerated without any progress is preserved, but now it does not result in an alert, since on an idle system event loop iteration might be very short and EBUSY can happen many times in a row. Instead, SF_NODISKIO is simply disabled for one call once the limit is reached. With this change, sendfile(SF_NODISKIO) is now used automatically as long as sendfile() is enabled, and no longer requires "aio on;".
* | Merged with the default branch.Ruslan Ermilov2021-12-24
|\|
| * HTTP/2: fixed "task already active" with sendfile in threads.Maxim Dounin2021-11-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With sendfile in threads, "task already active" alerts might appear in logs if a write event happens on the main HTTP/2 connection, triggering a sendfile in threads while another thread operation is already running. Observed with "aio threads; aio_write on; sendfile on;" and with thread event handlers modified to post a write event to the main HTTP/2 connection (though can happen without any modifications). Similarly, sendfile() with AIO preloading on FreeBSD can trigger duplicate aio operation, resulting in "second aio post" alerts. This is, however, harder to reproduce, especially on modern FreeBSD systems, since sendfile() usually does not return EBUSY. Fix is to avoid starting a sendfile operation if other thread operation is active by checking r->aio in the thread handler (and, similarly, in aio preload handler). The added check also makes duplicate calls protection redundant, so it is removed.
* | QUIC: write and full stream shutdown support.Roman Arutyunyan2021-12-13
| | | | | | | | | | Full stream shutdown is now called from stream cleanup handler instead of explicitly sending frames.
* | Merged with the default branch.Sergey Kandaurov2021-11-03
|\|
| * Fixed sendfile() limit handling on Linux.Maxim Dounin2021-10-29
| | | | | | | | | | | | | | | | | | | | | | On Linux starting with 2.6.16, sendfile() silently limits all operations to MAX_RW_COUNT, defined as (INT_MAX & PAGE_MASK). This incorrectly triggered the interrupt check, and resulted in 0-sized writev() on the next loop iteration. Fix is to make sure the limit is always checked, so we will return from the loop if the limit is already reached even if number of bytes sent is not exactly equal to the number of bytes we've tried to send.
* | Merged with the default branch.Sergey Kandaurov2021-09-01
|\|
| * Give GCC atomics precedence over deprecated Darwin atomic(3).Sergey Kandaurov2021-08-30
| | | | | | | | This allows to build nginx on macOS with -Wdeprecated-declarations.