Mercurial > hg > nginx
view src/os/unix/ngx_darwin_config.h @ 8106:8852f39311de
Fixed segfault when switching off master process during upgrade.
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.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 23 Nov 2022 23:48:53 +0300 |
parents | 9fb994513776 |
children | 93bbb9fbf30d |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_DARWIN_CONFIG_H_INCLUDED_ #define _NGX_DARWIN_CONFIG_H_INCLUDED_ #define __APPLE_USE_RFC_3542 /* IPV6_PKTINFO */ #include <sys/types.h> #include <sys/time.h> #include <unistd.h> #include <inttypes.h> #include <stdarg.h> #include <stddef.h> /* offsetof() */ #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <errno.h> #include <string.h> #include <signal.h> #include <pwd.h> #include <grp.h> #include <dirent.h> #include <glob.h> #include <sys/mount.h> /* statfs() */ #include <sys/filio.h> /* FIONBIO */ #include <sys/ioctl.h> #include <sys/uio.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/wait.h> #include <sys/mman.h> #include <sys/resource.h> #include <sched.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> /* TCP_NODELAY */ #include <arpa/inet.h> #include <netdb.h> #include <sys/un.h> #include <sys/sysctl.h> #include <xlocale.h> #include <dlfcn.h> #ifndef IOV_MAX #define IOV_MAX 64 #endif #include <ngx_auto_config.h> #if (NGX_HAVE_POSIX_SEM) #include <semaphore.h> #endif #if (NGX_HAVE_POLL) #include <poll.h> #endif #if (NGX_HAVE_KQUEUE) #include <sys/event.h> #endif #define NGX_LISTEN_BACKLOG -1 #ifndef NGX_HAVE_INHERITED_NONBLOCK #define NGX_HAVE_INHERITED_NONBLOCK 1 #endif #ifndef NGX_HAVE_CASELESS_FILESYSTEM #define NGX_HAVE_CASELESS_FILESYSTEM 1 #endif #define NGX_HAVE_OS_SPECIFIC_INIT 1 #define NGX_HAVE_DEBUG_MALLOC 1 extern char **environ; #endif /* _NGX_DARWIN_CONFIG_H_INCLUDED_ */