Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 1 | |
Igor Sysoev | d90282d | 2004-09-28 08:34:51 +0000 | [diff] [blame] | 2 | /* |
Igor Sysoev | ff8da91 | 2004-09-29 16:00:49 +0000 | [diff] [blame] | 3 | * Copyright (C) Igor Sysoev |
Maxim Konovalov | f8d59e3 | 2012-01-18 15:07:43 +0000 | [diff] [blame] | 4 | * Copyright (C) Nginx, Inc. |
Igor Sysoev | d90282d | 2004-09-28 08:34:51 +0000 | [diff] [blame] | 5 | */ |
| 6 | |
| 7 | |
Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 8 | #include <ngx_config.h> |
| 9 | #include <ngx_core.h> |
Igor Sysoev | ceb9929 | 2005-09-06 16:09:32 +0000 | [diff] [blame] | 10 | #include <nginx.h> |
Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 11 | |
| 12 | |
Igor Sysoev | 42b12b3 | 2004-12-02 18:40:46 +0000 | [diff] [blame] | 13 | ngx_int_t ngx_ncpu; |
| 14 | ngx_int_t ngx_max_sockets; |
| 15 | ngx_uint_t ngx_inherited_nonblocking; |
| 16 | ngx_uint_t ngx_tcp_nodelay_and_tcp_nopush; |
Igor Sysoev | aad1b89 | 2004-10-03 20:02:06 +0000 | [diff] [blame] | 17 | |
| 18 | |
| 19 | struct rlimit rlmt; |
Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 20 | |
| 21 | |
Igor Sysoev | d09f7a1 | 2004-06-15 17:47:16 +0000 | [diff] [blame] | 22 | ngx_os_io_t ngx_os_io = { |
| 23 | ngx_unix_recv, |
| 24 | ngx_readv_chain, |
Igor Sysoev | e67d461 | 2007-12-03 16:46:46 +0000 | [diff] [blame] | 25 | ngx_udp_unix_recv, |
Igor Sysoev | 97bf6c7 | 2008-12-25 20:07:12 +0000 | [diff] [blame] | 26 | ngx_unix_send, |
Igor Sysoev | d09f7a1 | 2004-06-15 17:47:16 +0000 | [diff] [blame] | 27 | ngx_writev_chain, |
| 28 | 0 |
| 29 | }; |
| 30 | |
| 31 | |
Igor Sysoev | ceb9929 | 2005-09-06 16:09:32 +0000 | [diff] [blame] | 32 | ngx_int_t |
| 33 | ngx_os_init(ngx_log_t *log) |
Igor Sysoev | d09f7a1 | 2004-06-15 17:47:16 +0000 | [diff] [blame] | 34 | { |
Igor Sysoev | 67cd336 | 2006-11-20 08:51:45 +0000 | [diff] [blame] | 35 | ngx_uint_t n; |
| 36 | |
Igor Sysoev | ceb9929 | 2005-09-06 16:09:32 +0000 | [diff] [blame] | 37 | #if (NGX_HAVE_OS_SPECIFIC_INIT) |
| 38 | if (ngx_os_specific_init(log) != NGX_OK) { |
| 39 | return NGX_ERROR; |
| 40 | } |
Igor Sysoev | d09f7a1 | 2004-06-15 17:47:16 +0000 | [diff] [blame] | 41 | #endif |
| 42 | |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 43 | ngx_init_setproctitle(log); |
| 44 | |
Igor Sysoev | 0ab91b9 | 2004-06-06 19:49:18 +0000 | [diff] [blame] | 45 | ngx_pagesize = getpagesize(); |
Igor Sysoev | 2402502 | 2005-12-16 15:07:08 +0000 | [diff] [blame] | 46 | ngx_cacheline_size = NGX_CPU_CACHE_LINE; |
Igor Sysoev | 0ab91b9 | 2004-06-06 19:49:18 +0000 | [diff] [blame] | 47 | |
Igor Sysoev | 67cd336 | 2006-11-20 08:51:45 +0000 | [diff] [blame] | 48 | for (n = ngx_pagesize; n >>= 1; ngx_pagesize_shift++) { /* void */ } |
| 49 | |
Valentin Bartenev | 891b43d | 2012-02-10 11:24:19 +0000 | [diff] [blame] | 50 | #if (NGX_HAVE_SC_NPROCESSORS_ONLN) |
Igor Sysoev | 078d1b2 | 2004-06-30 15:30:41 +0000 | [diff] [blame] | 51 | if (ngx_ncpu == 0) { |
Valentin Bartenev | 891b43d | 2012-02-10 11:24:19 +0000 | [diff] [blame] | 52 | ngx_ncpu = sysconf(_SC_NPROCESSORS_ONLN); |
| 53 | } |
| 54 | #endif |
| 55 | |
| 56 | if (ngx_ncpu < 1) { |
Igor Sysoev | 078d1b2 | 2004-06-30 15:30:41 +0000 | [diff] [blame] | 57 | ngx_ncpu = 1; |
| 58 | } |
| 59 | |
Igor Sysoev | ffe7144 | 2006-02-08 15:33:12 +0000 | [diff] [blame] | 60 | ngx_cpuinfo(); |
| 61 | |
Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 62 | if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { |
| 63 | ngx_log_error(NGX_LOG_ALERT, log, errno, |
| 64 | "getrlimit(RLIMIT_NOFILE) failed)"); |
| 65 | return NGX_ERROR; |
| 66 | } |
Igor Sysoev | 0e5dc5c | 2005-11-15 13:30:52 +0000 | [diff] [blame] | 67 | |
Igor Sysoev | c2068d0 | 2005-10-19 12:33:58 +0000 | [diff] [blame] | 68 | ngx_max_sockets = (ngx_int_t) rlmt.rlim_cur; |
Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 69 | |
Igor Sysoev | 40747ad | 2010-11-25 10:15:04 +0000 | [diff] [blame] | 70 | #if (NGX_HAVE_INHERITED_NONBLOCK || NGX_HAVE_ACCEPT4) |
Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 71 | ngx_inherited_nonblocking = 1; |
| 72 | #else |
| 73 | ngx_inherited_nonblocking = 0; |
| 74 | #endif |
| 75 | |
Igor Sysoev | abeb122 | 2006-10-23 13:10:10 +0000 | [diff] [blame] | 76 | srandom(ngx_time()); |
| 77 | |
Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 78 | return NGX_OK; |
| 79 | } |
| 80 | |
| 81 | |
Igor Sysoev | ceb9929 | 2005-09-06 16:09:32 +0000 | [diff] [blame] | 82 | void |
| 83 | ngx_os_status(ngx_log_t *log) |
Igor Sysoev | aad1b89 | 2004-10-03 20:02:06 +0000 | [diff] [blame] | 84 | { |
Ruslan Ermilov | 1736c18 | 2014-05-20 16:10:07 +0400 | [diff] [blame^] | 85 | ngx_log_error(NGX_LOG_NOTICE, log, 0, NGINX_VER_BUILD); |
Igor Sysoev | e573380 | 2005-09-08 14:36:09 +0000 | [diff] [blame] | 86 | |
Igor Sysoev | 208eed2 | 2005-10-07 13:30:52 +0000 | [diff] [blame] | 87 | #ifdef NGX_COMPILER |
| 88 | ngx_log_error(NGX_LOG_NOTICE, log, 0, "built by " NGX_COMPILER); |
| 89 | #endif |
| 90 | |
Igor Sysoev | ceb9929 | 2005-09-06 16:09:32 +0000 | [diff] [blame] | 91 | #if (NGX_HAVE_OS_SPECIFIC_INIT) |
| 92 | ngx_os_specific_status(log); |
| 93 | #endif |
| 94 | |
Igor Sysoev | 90c0814 | 2005-07-25 09:41:38 +0000 | [diff] [blame] | 95 | ngx_log_error(NGX_LOG_NOTICE, log, 0, |
Igor Sysoev | 1b73583 | 2004-11-11 14:07:14 +0000 | [diff] [blame] | 96 | "getrlimit(RLIMIT_NOFILE): %r:%r", |
Igor Sysoev | aad1b89 | 2004-10-03 20:02:06 +0000 | [diff] [blame] | 97 | rlmt.rlim_cur, rlmt.rlim_max); |
| 98 | } |
| 99 | |
| 100 | |
Ruslan Ermilov | 1efcca3 | 2012-07-24 15:09:54 +0000 | [diff] [blame] | 101 | #if 0 |
| 102 | |
Igor Sysoev | ceb9929 | 2005-09-06 16:09:32 +0000 | [diff] [blame] | 103 | ngx_int_t |
| 104 | ngx_posix_post_conf_init(ngx_log_t *log) |
Igor Sysoev | fa73aac | 2003-05-21 13:28:21 +0000 | [diff] [blame] | 105 | { |
| 106 | ngx_fd_t pp[2]; |
| 107 | |
| 108 | if (pipe(pp) == -1) { |
| 109 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "pipe() failed"); |
| 110 | return NGX_ERROR; |
| 111 | } |
| 112 | |
| 113 | if (dup2(pp[1], STDERR_FILENO) == -1) { |
| 114 | ngx_log_error(NGX_LOG_EMERG, log, errno, "dup2(STDERR) failed"); |
| 115 | return NGX_ERROR; |
| 116 | } |
| 117 | |
| 118 | if (pp[1] > STDERR_FILENO) { |
| 119 | if (close(pp[1]) == -1) { |
| 120 | ngx_log_error(NGX_LOG_EMERG, log, errno, "close() failed"); |
| 121 | return NGX_ERROR; |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | return NGX_OK; |
| 126 | } |
Ruslan Ermilov | 1efcca3 | 2012-07-24 15:09:54 +0000 | [diff] [blame] | 127 | |
| 128 | #endif |