annotate src/os/unix/ngx_errno.c @ 640:eb208e0cf44d NGINX_1_1_4

nginx 1.1.4 *) Feature: the ngx_http_upstream_keepalive module. *) Feature: the "proxy_http_version" directive. *) Feature: the "fastcgi_keep_conn" directive. *) Feature: the "worker_aio_requests" directive. *) Bugfix: if nginx was built --with-file-aio it could not be run on Linux kernel which did not support AIO. *) Bugfix: in Linux AIO error processing. Thanks to Hagai Avrahami. *) Bugfix: reduced memory consumption for long-lived requests. *) Bugfix: the module ngx_http_mp4_module did not support 64-bit MP4 "co64" atom.
author Igor Sysoev <http://sysoev.ru>
date Tue, 20 Sep 2011 00:00:00 +0400
parents 428c6e58046a
children d0f7a625f27c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
11 /*
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
12 * The strerror() messages are copied because:
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
13 *
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
14 * 1) strerror() and strerror_r() functions are not Async-Signal-Safe,
640
eb208e0cf44d nginx 1.1.4
Igor Sysoev <http://sysoev.ru>
parents: 604
diff changeset
15 * therefore, they cannot be used in signal handlers;
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
16 *
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
17 * 2) a direct sys_errlist[] array may be used instead of these functions,
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
18 * but Linux linker warns about its usage:
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
19 *
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
20 * warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
21 * warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
22 *
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
23 * causing false bug reports.
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
24 */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
27 static ngx_str_t *ngx_sys_errlist;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
28 static ngx_str_t ngx_unknown_error = ngx_string("Unknown error");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
29
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30
422
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
31 u_char *
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
32 ngx_strerror(ngx_err_t err, u_char *errstr, size_t size)
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
33 {
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
34 ngx_str_t *msg;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
35
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
36 msg = ((ngx_uint_t) err < NGX_SYS_NERR) ? &ngx_sys_errlist[err]:
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
37 &ngx_unknown_error;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
38 size = ngx_min(size, msg->len);
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
39
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
40 return ngx_cpymem(errstr, msg->data, size);
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
41 }
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
42
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
43
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
44 ngx_uint_t
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
45 ngx_strerror_init(void)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 {
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
47 char *msg;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
48 u_char *p;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
49 size_t len;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
50 ngx_err_t err;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
52 /*
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
53 * ngx_strerror() is not ready to work at this stage, therefore,
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
54 * malloc() is used and possible errors are logged using strerror().
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
55 */
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
56
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
57 len = NGX_SYS_NERR * sizeof(ngx_str_t);
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
58
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
59 ngx_sys_errlist = malloc(len);
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
60 if (ngx_sys_errlist == NULL) {
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
61 goto failed;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
62 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
64 for (err = 0; err < NGX_SYS_NERR; err++) {
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
65 msg = strerror(err);
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
66 len = ngx_strlen(msg);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
67
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
68 p = malloc(len);
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
69 if (p == NULL) {
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
70 goto failed;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
71 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
73 ngx_memcpy(p, msg, len);
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
74 ngx_sys_errlist[err].len = len;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
75 ngx_sys_errlist[err].data = p;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
77
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
78 return NGX_OK;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
79
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
80 failed:
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81
604
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
82 err = errno;
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
83 ngx_log_stderr(0, "malloc(%uz) failed (%d: %s)", len, err, strerror(err));
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
84
428c6e58046a nginx 0.9.0
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
85 return NGX_ERROR;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86 }