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) {