Mercurial > hg > nginx-quic
diff src/os/unix/ngx_darwin_init.c @ 2128:345a014436d4
*) move Darwin support to separate files
*) Darwin sendfile() support
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 30 Jul 2008 12:18:07 +0000 |
parents | src/os/unix/ngx_freebsd_init.c@b794d78e52c5 |
children | 22b05d177dc6 |
line wrap: on
line diff
copy from src/os/unix/ngx_freebsd_init.c copy to src/os/unix/ngx_darwin_init.c --- a/src/os/unix/ngx_freebsd_init.c +++ b/src/os/unix/ngx_darwin_init.c @@ -8,33 +8,20 @@ #include <ngx_core.h> -/* FreeBSD 3.0 at least */ -char ngx_freebsd_kern_ostype[16]; -char ngx_freebsd_kern_osrelease[128]; -int ngx_freebsd_kern_osreldate; -int ngx_freebsd_hw_ncpu; -int ngx_freebsd_kern_ipc_somaxconn; -u_long ngx_freebsd_net_inet_tcp_sendspace; - -/* FreeBSD 4.9 */ -int ngx_freebsd_machdep_hlt_logical_cpus; - -/* FreeBSD 5.0 */ -int ngx_freebsd_kern_ipc_zero_copy_send; +char ngx_darwin_kern_ostype[16]; +char ngx_darwin_kern_osrelease[128]; +int ngx_darwin_hw_ncpu; +int ngx_darwin_kern_ipc_somaxconn; +u_long ngx_darwin_net_inet_tcp_sendspace; -ngx_uint_t ngx_freebsd_sendfile_nbytes_bug; -ngx_uint_t ngx_freebsd_use_tcp_nopush; -ngx_uint_t ngx_freebsd_debug_malloc; - - -static ngx_os_io_t ngx_freebsd_io = { +static ngx_os_io_t ngx_darwin_io = { ngx_unix_recv, ngx_readv_chain, ngx_udp_unix_recv, ngx_unix_send, #if (NGX_HAVE_SENDFILE) - ngx_freebsd_sendfile_chain, + ngx_darwin_sendfile_chain, NGX_IO_SENDFILE #else ngx_writev_chain, @@ -53,65 +40,32 @@ typedef struct { sysctl_t sysctls[] = { { "hw.ncpu", - &ngx_freebsd_hw_ncpu, - sizeof(ngx_freebsd_hw_ncpu), 0 }, - - { "machdep.hlt_logical_cpus", - &ngx_freebsd_machdep_hlt_logical_cpus, - sizeof(ngx_freebsd_machdep_hlt_logical_cpus), 0 }, + &ngx_darwin_hw_ncpu, + sizeof(ngx_darwin_hw_ncpu), 0 }, { "net.inet.tcp.sendspace", - &ngx_freebsd_net_inet_tcp_sendspace, - sizeof(ngx_freebsd_net_inet_tcp_sendspace), 0 }, + &ngx_darwin_net_inet_tcp_sendspace, + sizeof(ngx_darwin_net_inet_tcp_sendspace), 0 }, { "kern.ipc.somaxconn", - &ngx_freebsd_kern_ipc_somaxconn, - sizeof(ngx_freebsd_kern_ipc_somaxconn), 0 }, - - { "kern.ipc.zero_copy.send", - &ngx_freebsd_kern_ipc_zero_copy_send, - sizeof(ngx_freebsd_kern_ipc_zero_copy_send), 0 }, + &ngx_darwin_kern_ipc_somaxconn, + sizeof(ngx_darwin_kern_ipc_somaxconn), 0 }, { NULL, NULL, 0, 0 } }; -void -ngx_debug_init() -{ -#if (NGX_DEBUG_MALLOC) - -#if __FreeBSD_version >= 500014 - _malloc_options = "J"; -#else - malloc_options = "J"; -#endif - - ngx_freebsd_debug_malloc = 1; - -#else - char *mo; - - mo = getenv("MALLOC_OPTIONS"); - - if (mo && ngx_strchr(mo, 'J')) { - ngx_freebsd_debug_malloc = 1; - } -#endif -} - - ngx_int_t ngx_os_specific_init(ngx_log_t *log) { - int version, somaxconn; + int somaxconn; size_t size; ngx_err_t err; ngx_uint_t i; - size = sizeof(ngx_freebsd_kern_ostype); + size = sizeof(ngx_darwin_kern_ostype); if (sysctlbyname("kern.ostype", - ngx_freebsd_kern_ostype, &size, NULL, 0) == -1) { + ngx_darwin_kern_ostype, &size, NULL, 0) == -1) { ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "sysctlbyname(kern.ostype) failed"); @@ -119,12 +73,12 @@ ngx_os_specific_init(ngx_log_t *log) return NGX_ERROR; } - ngx_freebsd_kern_ostype[size - 1] = '\0'; + ngx_darwin_kern_ostype[size - 1] = '\0'; } - size = sizeof(ngx_freebsd_kern_osrelease); + size = sizeof(ngx_darwin_kern_osrelease); if (sysctlbyname("kern.osrelease", - ngx_freebsd_kern_osrelease, &size, NULL, 0) == -1) { + ngx_darwin_kern_osrelease, &size, NULL, 0) == -1) { ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "sysctlbyname(kern.osrelease) failed"); @@ -132,59 +86,7 @@ ngx_os_specific_init(ngx_log_t *log) return NGX_ERROR; } - ngx_freebsd_kern_osrelease[size - 1] = '\0'; - } - - - size = sizeof(int); - if (sysctlbyname("kern.osreldate", - &ngx_freebsd_kern_osreldate, &size, NULL, 0) == -1) { - ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, - "sysctlbyname(kern.osreldate) failed"); - return NGX_ERROR; - } - - version = ngx_freebsd_kern_osreldate; - - -#if (NGX_HAVE_SENDFILE) - - /* - * The determination of the sendfile() "nbytes bug" is complex enough. - * There are two sendfile() syscalls: a new #393 has no bug while - * an old #336 has the bug in some versions and has not in others. - * Besides libc_r wrapper also emulates the bug in some versions. - * There is no way to say exactly if syscall #336 in FreeBSD circa 4.6 - * has the bug. We use the algorithm that is correct at least for - * RELEASEs and for syscalls only (not libc_r wrapper). - * - * 4.6.1-RELEASE and below have the bug - * 4.6.2-RELEASE and above have the new syscall - * - * We detect the new sendfile() syscall available at the compile time - * to allow an old binary to run correctly on an updated FreeBSD system. - */ - -#if (__FreeBSD__ == 4 && __FreeBSD_version >= 460102) \ - || __FreeBSD_version == 460002 || __FreeBSD_version >= 500039 - - /* a new syscall without the bug */ - - ngx_freebsd_sendfile_nbytes_bug = 0; - -#else - - /* an old syscall that may have the bug */ - - ngx_freebsd_sendfile_nbytes_bug = 1; - -#endif - -#endif /* NGX_HAVE_SENDFILE */ - - - if ((version < 500000 && version >= 440003) || version >= 500017) { - ngx_freebsd_use_tcp_nopush = 1; + ngx_darwin_kern_osrelease[size - 1] = '\0'; } @@ -209,16 +111,11 @@ ngx_os_specific_init(ngx_log_t *log) return NGX_ERROR; } - if (ngx_freebsd_machdep_hlt_logical_cpus) { - ngx_ncpu = ngx_freebsd_hw_ncpu / 2; + ngx_ncpu = ngx_darwin_hw_ncpu; - } else { - ngx_ncpu = ngx_freebsd_hw_ncpu; - } + somaxconn = 32676; - somaxconn = version < 600008 ? 32676 : 65535; - - if (ngx_freebsd_kern_ipc_somaxconn > somaxconn) { + if (ngx_darwin_kern_ipc_somaxconn > somaxconn) { ngx_log_error(NGX_LOG_ALERT, log, 0, "sysctl kern.ipc.somaxconn must be no more than %d", somaxconn); @@ -227,7 +124,7 @@ ngx_os_specific_init(ngx_log_t *log) ngx_tcp_nodelay_and_tcp_nopush = 1; - ngx_os_io = ngx_freebsd_io; + ngx_os_io = ngx_darwin_io; return NGX_OK; } @@ -240,17 +137,7 @@ ngx_os_specific_status(ngx_log_t *log) ngx_uint_t i; ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s", - ngx_freebsd_kern_ostype, ngx_freebsd_kern_osrelease); - -#ifdef __DragonFly_version - ngx_log_error(NGX_LOG_NOTICE, log, 0, - "kern.osreldate: %d, built on %d", - ngx_freebsd_kern_osreldate, __DragonFly_version); -#else - ngx_log_error(NGX_LOG_NOTICE, log, 0, - "kern.osreldate: %d, built on %d", - ngx_freebsd_kern_osreldate, __FreeBSD_version); -#endif + ngx_darwin_kern_ostype, ngx_darwin_kern_osrelease); for (i = 0; sysctls[i].name; i++) { if (sysctls[i].exists) {