Mercurial > hg > nginx
diff src/os/unix/ngx_freebsd_init.c @ 449:3b1e8c9df9ad
nginx-0.1.0-2004-10-04-00:02:06 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 03 Oct 2004 20:02:06 +0000 |
parents | 42d11f017717 |
children | 23fb87bddda1 |
line wrap: on
line diff
--- a/src/os/unix/ngx_freebsd_init.c Fri Oct 01 15:53:53 2004 +0000 +++ b/src/os/unix/ngx_freebsd_init.c Sun Oct 03 20:02:06 2004 +0000 @@ -22,8 +22,8 @@ int ngx_freebsd_kern_ipc_zero_copy_send; -int ngx_freebsd_sendfile_nbytes_bug; -int ngx_freebsd_use_tcp_nopush; +ngx_uint_t ngx_freebsd_sendfile_nbytes_bug; +ngx_uint_t ngx_freebsd_use_tcp_nopush; ngx_os_io_t ngx_os_io = { @@ -41,32 +41,31 @@ typedef struct { - char *name; - int *value; - size_t size; + char *name; + int *value; + size_t size; + ngx_uint_t exists; } sysctl_t; sysctl_t sysctls[] = { - {"hw.ncpu", - &ngx_freebsd_hw_ncpu, - sizeof(int)}, + { "hw.ncpu", + &ngx_freebsd_hw_ncpu, + sizeof(int), 0 }, - {"machdep.hlt_logical_cpus", - &ngx_freebsd_machdep_hlt_logical_cpus, - sizeof(int)}, + { "machdep.hlt_logical_cpus", + &ngx_freebsd_machdep_hlt_logical_cpus, + sizeof(int), 0 }, - {"net.inet.tcp.sendspace", - &ngx_freebsd_net_inet_tcp_sendspace, - sizeof(int)}, - - /* FreeBSD 5.0 */ + { "net.inet.tcp.sendspace", + &ngx_freebsd_net_inet_tcp_sendspace, + sizeof(int), 0 }, - {"kern.ipc.zero_copy.send", - &ngx_freebsd_kern_ipc_zero_copy_send, - sizeof(int)}, + { "kern.ipc.zero_copy.send", + &ngx_freebsd_kern_ipc_zero_copy_send, + sizeof(int), 0 }, - {NULL, NULL, 0} + { NULL, NULL, 0, 0 } }; @@ -84,11 +83,12 @@ } -int ngx_os_init(ngx_log_t *log) +ngx_int_t ngx_os_init(ngx_log_t *log) { - int i, version; - size_t size; - ngx_err_t err; + int version; + size_t size; + ngx_err_t err; + ngx_uint_t i; size = sizeof(ngx_freebsd_kern_ostype); if (sysctlbyname("kern.ostype", @@ -106,9 +106,6 @@ return NGX_ERROR; } - ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %s %s", - ngx_freebsd_kern_ostype, ngx_freebsd_kern_osrelease); - size = sizeof(int); if (sysctlbyname("kern.osreldate", @@ -120,17 +117,6 @@ version = ngx_freebsd_kern_osreldate; -#ifdef __DragonFly_version - ngx_log_error(NGX_LOG_INFO, log, 0, - "kern.osreldate: %d, built on %d", - version, __DragonFly_version); -#else - ngx_log_error(NGX_LOG_INFO, log, 0, - "kern.osreldate: %d, built on %d", - version, __FreeBSD_version); -#endif - - #if (HAVE_SENDFILE) @@ -139,9 +125,9 @@ * 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's no way to say exactly if a given FreeBSD version has the bug. - * We use the algorithm that is correct at least for RELEASEs - * and for syscalls only (not libc_r wrapper). + * 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 @@ -176,23 +162,29 @@ for (i = 0; sysctls[i].name; i++) { *sysctls[i].value = 0; size = sysctls[i].size; + if (sysctlbyname(sysctls[i].name, sysctls[i].value, &size, NULL, 0) - == -1) { - err = ngx_errno; - if (err != NGX_ENOENT) { - if (sysctls[i].value == &ngx_freebsd_machdep_hlt_logical_cpus) { - continue; - } + == 0) + { + sysctls[i].exists = 1; + continue; + } + + err = ngx_errno; - ngx_log_error(NGX_LOG_ALERT, log, err, - "sysctlbyname(%s) failed", sysctls[i].name); - return NGX_ERROR; - } + if (err == NGX_ENOENT) { + continue; + } - } else { - ngx_log_error(NGX_LOG_INFO, log, 0, "%s: %d", - sysctls[i].name, *sysctls[i].value); +#if 0 + if (sysctls[i].value == &ngx_freebsd_machdep_hlt_logical_cpus) { + continue; } +#endif + + ngx_log_error(NGX_LOG_ALERT, log, err, + "sysctlbyname(%s) failed", sysctls[i].name); + return NGX_ERROR; } if (ngx_freebsd_machdep_hlt_logical_cpus) { @@ -203,3 +195,31 @@ return ngx_posix_init(log); } + + +void ngx_os_status(ngx_log_t *log) +{ + ngx_uint_t i; + + ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %s %s", + ngx_freebsd_kern_ostype, ngx_freebsd_kern_osrelease); + +#ifdef __DragonFly_version + ngx_log_error(NGX_LOG_INFO, log, 0, + "kern.osreldate: %d, built on %d", + ngx_freebsd_kern_osreldate, __DragonFly_version); +#else + ngx_log_error(NGX_LOG_INFO, log, 0, + "kern.osreldate: %d, built on %d", + ngx_freebsd_kern_osreldate, __FreeBSD_version); +#endif + + for (i = 0; sysctls[i].name; i++) { + if (sysctls[i].exists) { + ngx_log_error(NGX_LOG_INFO, log, 0, "%s: %d", + sysctls[i].name, *sysctls[i].value); + } + } + + ngx_posix_status(log); +}