diff src/os/unix/ngx_freebsd_init.c @ 373:018569a8f09c

nginx-0.0.7-2004-06-30-19:30:41 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 30 Jun 2004 15:30:41 +0000
parents 446782c909b3
children b670db10cbbd
line wrap: on
line diff
--- a/src/os/unix/ngx_freebsd_init.c
+++ b/src/os/unix/ngx_freebsd_init.c
@@ -8,6 +8,7 @@ char ngx_freebsd_kern_ostype[20];
 char ngx_freebsd_kern_osrelease[20];
 int ngx_freebsd_kern_osreldate;
 int ngx_freebsd_hw_ncpu;
+int ngx_freebsd_machdep_hlt_logical_cpus;
 int ngx_freebsd_net_inet_tcp_sendspace;
 int ngx_freebsd_sendfile_nbytes_bug;
 int ngx_freebsd_use_tcp_nopush;
@@ -42,6 +43,10 @@ sysctl_t sysctls[] = {
      &ngx_freebsd_hw_ncpu,
      sizeof(int)},
 
+    {"machdep.hlt_logical_cpus",
+     &ngx_freebsd_machdep_hlt_logical_cpus,
+     sizeof(int)},
+
     {"net.inet.tcp.sendspace",
      &ngx_freebsd_net_inet_tcp_sendspace,
      sizeof(int)},
@@ -166,6 +171,10 @@ int ngx_os_init(ngx_log_t *log)
                                                                        == -1) {
             err = errno;
             if (err != NGX_ENOENT) {
+                if (sysctls[i].value == &ngx_freebsd_machdep_hlt_logical_cpus) {
+                    continue;
+                }
+
                 ngx_log_error(NGX_LOG_ALERT, log, err,
                               "sysctlbyname(%s) failed", sysctls[i].name);
                 return NGX_ERROR;
@@ -177,5 +186,11 @@ int ngx_os_init(ngx_log_t *log)
         }
     }
 
+    if (ngx_freebsd_machdep_hlt_logical_cpus) {
+        ngx_ncpu = ngx_freebsd_hw_ncpu / 2;
+    } else {
+        ngx_ncpu = ngx_freebsd_hw_ncpu;
+    }
+
     return ngx_posix_init(log);
 }