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