use sys_errlist[] in signal handler instead
of non Async-Signal-Safe strerror_r()
Igor Sysoev
12 years ago
132 | 132 |
. auto/feature
|
133 | 133 |
|
134 | 134 |
|
|
135 |
ngx_feature="sys_errlist[]"
|
|
136 |
ngx_feature_name="NGX_HAVE_SYS_ERRLIST"
|
|
137 |
ngx_feature_run=yes
|
|
138 |
ngx_feature_incs="#include <stdio.h>"
|
|
139 |
ngx_feature_path=
|
|
140 |
ngx_feature_libs=
|
|
141 |
ngx_feature_test="int n = sys_nerr; const char *p = sys_errlist[1];"
|
|
142 |
. auto/feature
|
|
143 |
|
|
144 |
|
135 | 145 |
ngx_feature="localtime_r()"
|
136 | 146 |
ngx_feature_name="NGX_HAVE_LOCALTIME_R"
|
137 | 147 |
ngx_feature_run=no
|
63 | 63 |
|
64 | 64 |
/* Solaris and Tru64 UNIX have thread-safe strerror() */
|
65 | 65 |
|
66 | |
#define ngx_strerror_r(err, errstr, size) \
|
|
66 |
#define ngx_strerror_r(err, errstr, size) \
|
67 | 67 |
ngx_cpystrn(errstr, (u_char *) strerror(err), size)
|
68 | 68 |
|
69 | 69 |
#endif
|
70 | 70 |
|
71 | 71 |
|
|
72 |
#if (NGX_HAVE_SYS_ERRLIST)
|
|
73 |
|
|
74 |
#define ngx_sigsafe_strerror(err) \
|
|
75 |
(err > 0 && err < sys_nerr) ? sys_errlist[err] : "Unknown error"
|
|
76 |
|
|
77 |
#else
|
|
78 |
|
|
79 |
#define ngx_sigsafe_strerror(err) ""
|
|
80 |
|
|
81 |
#endif
|
|
82 |
|
|
83 |
|
72 | 84 |
#endif /* _NGX_ERRNO_H_INCLUDED_ */
|
478 | 478 |
*/
|
479 | 479 |
|
480 | 480 |
if (err == NGX_ECHILD) {
|
481 | |
ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, errno,
|
482 | |
"waitpid() failed");
|
|
481 |
ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
|
|
482 |
"waitpid() failed (%d: %s)",
|
|
483 |
err, ngx_sigsafe_strerror(err));
|
483 | 484 |
return;
|
484 | 485 |
}
|
485 | 486 |
|
486 | 487 |
#endif
|
487 | 488 |
|
488 | |
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, errno,
|
489 | |
"waitpid() failed");
|
490 | |
|
|
489 |
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
|
|
490 |
"waitpid() failed (%d: %s)",
|
|
491 |
err, ngx_sigsafe_strerror(err));
|
491 | 492 |
return;
|
492 | 493 |
}
|
493 | 494 |
|