Annotation of embedaddon/nginx/src/os/unix/ngx_darwin_init.c, revision 1.1
1.1 ! misho 1:
! 2: /*
! 3: * Copyright (C) Igor Sysoev
! 4: * Copyright (C) Nginx, Inc.
! 5: */
! 6:
! 7:
! 8: #include <ngx_config.h>
! 9: #include <ngx_core.h>
! 10:
! 11:
! 12: char ngx_darwin_kern_ostype[16];
! 13: char ngx_darwin_kern_osrelease[128];
! 14: int ngx_darwin_hw_ncpu;
! 15: int ngx_darwin_kern_ipc_somaxconn;
! 16: u_long ngx_darwin_net_inet_tcp_sendspace;
! 17:
! 18: ngx_uint_t ngx_debug_malloc;
! 19:
! 20:
! 21: static ngx_os_io_t ngx_darwin_io = {
! 22: ngx_unix_recv,
! 23: ngx_readv_chain,
! 24: ngx_udp_unix_recv,
! 25: ngx_unix_send,
! 26: #if (NGX_HAVE_SENDFILE)
! 27: ngx_darwin_sendfile_chain,
! 28: NGX_IO_SENDFILE
! 29: #else
! 30: ngx_writev_chain,
! 31: 0
! 32: #endif
! 33: };
! 34:
! 35:
! 36: typedef struct {
! 37: char *name;
! 38: void *value;
! 39: size_t size;
! 40: ngx_uint_t exists;
! 41: } sysctl_t;
! 42:
! 43:
! 44: sysctl_t sysctls[] = {
! 45: { "hw.ncpu",
! 46: &ngx_darwin_hw_ncpu,
! 47: sizeof(ngx_darwin_hw_ncpu), 0 },
! 48:
! 49: { "net.inet.tcp.sendspace",
! 50: &ngx_darwin_net_inet_tcp_sendspace,
! 51: sizeof(ngx_darwin_net_inet_tcp_sendspace), 0 },
! 52:
! 53: { "kern.ipc.somaxconn",
! 54: &ngx_darwin_kern_ipc_somaxconn,
! 55: sizeof(ngx_darwin_kern_ipc_somaxconn), 0 },
! 56:
! 57: { NULL, NULL, 0, 0 }
! 58: };
! 59:
! 60:
! 61: void
! 62: ngx_debug_init()
! 63: {
! 64: #if (NGX_DEBUG_MALLOC)
! 65:
! 66: /*
! 67: * MacOSX 10.6, 10.7: MallocScribble fills freed memory with 0x55
! 68: * and fills allocated memory with 0xAA.
! 69: * MacOSX 10.4, 10.5: MallocScribble fills freed memory with 0x55,
! 70: * MallocPreScribble fills allocated memory with 0xAA.
! 71: * MacOSX 10.3: MallocScribble fills freed memory with 0x55,
! 72: * and no way to fill allocated memory.
! 73: */
! 74:
! 75: setenv("MallocScribble", "1", 0);
! 76:
! 77: ngx_debug_malloc = 1;
! 78:
! 79: #else
! 80:
! 81: if (getenv("MallocScribble")) {
! 82: ngx_debug_malloc = 1;
! 83: }
! 84:
! 85: #endif
! 86: }
! 87:
! 88:
! 89: ngx_int_t
! 90: ngx_os_specific_init(ngx_log_t *log)
! 91: {
! 92: size_t size;
! 93: ngx_err_t err;
! 94: ngx_uint_t i;
! 95:
! 96: size = sizeof(ngx_darwin_kern_ostype);
! 97: if (sysctlbyname("kern.ostype", ngx_darwin_kern_ostype, &size, NULL, 0)
! 98: == -1)
! 99: {
! 100: err = ngx_errno;
! 101:
! 102: if (err != NGX_ENOENT) {
! 103:
! 104: ngx_log_error(NGX_LOG_ALERT, log, err,
! 105: "sysctlbyname(kern.ostype) failed");
! 106:
! 107: if (err != NGX_ENOMEM) {
! 108: return NGX_ERROR;
! 109: }
! 110:
! 111: ngx_darwin_kern_ostype[size - 1] = '\0';
! 112: }
! 113: }
! 114:
! 115: size = sizeof(ngx_darwin_kern_osrelease);
! 116: if (sysctlbyname("kern.osrelease", ngx_darwin_kern_osrelease, &size,
! 117: NULL, 0)
! 118: == -1)
! 119: {
! 120: err = ngx_errno;
! 121:
! 122: if (err != NGX_ENOENT) {
! 123:
! 124: ngx_log_error(NGX_LOG_ALERT, log, err,
! 125: "sysctlbyname(kern.osrelease) failed");
! 126:
! 127: if (err != NGX_ENOMEM) {
! 128: return NGX_ERROR;
! 129: }
! 130:
! 131: ngx_darwin_kern_osrelease[size - 1] = '\0';
! 132: }
! 133: }
! 134:
! 135: for (i = 0; sysctls[i].name; i++) {
! 136: size = sysctls[i].size;
! 137:
! 138: if (sysctlbyname(sysctls[i].name, sysctls[i].value, &size, NULL, 0)
! 139: == 0)
! 140: {
! 141: sysctls[i].exists = 1;
! 142: continue;
! 143: }
! 144:
! 145: err = ngx_errno;
! 146:
! 147: if (err == NGX_ENOENT) {
! 148: continue;
! 149: }
! 150:
! 151: ngx_log_error(NGX_LOG_ALERT, log, err,
! 152: "sysctlbyname(%s) failed", sysctls[i].name);
! 153: return NGX_ERROR;
! 154: }
! 155:
! 156: ngx_ncpu = ngx_darwin_hw_ncpu;
! 157:
! 158: if (ngx_darwin_kern_ipc_somaxconn > 32767) {
! 159: ngx_log_error(NGX_LOG_ALERT, log, 0,
! 160: "sysctl kern.ipc.somaxconn must be less than 32768");
! 161: return NGX_ERROR;
! 162: }
! 163:
! 164: ngx_tcp_nodelay_and_tcp_nopush = 1;
! 165:
! 166: ngx_os_io = ngx_darwin_io;
! 167:
! 168: return NGX_OK;
! 169: }
! 170:
! 171:
! 172: void
! 173: ngx_os_specific_status(ngx_log_t *log)
! 174: {
! 175: u_long value;
! 176: ngx_uint_t i;
! 177:
! 178: if (ngx_darwin_kern_ostype[0]) {
! 179: ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s",
! 180: ngx_darwin_kern_ostype, ngx_darwin_kern_osrelease);
! 181: }
! 182:
! 183: for (i = 0; sysctls[i].name; i++) {
! 184: if (sysctls[i].exists) {
! 185: if (sysctls[i].size == sizeof(long)) {
! 186: value = *(long *) sysctls[i].value;
! 187:
! 188: } else {
! 189: value = *(int *) sysctls[i].value;
! 190: }
! 191:
! 192: ngx_log_error(NGX_LOG_NOTICE, log, 0, "%s: %l",
! 193: sysctls[i].name, value);
! 194: }
! 195: }
! 196: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>