diff options
author | Igor Sysoev <igor@sysoev.ru> | 2010-03-12 11:15:26 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2010-03-12 11:15:26 +0000 |
commit | 9eaabc69ca4401b0a1fbfd27c2265213ab656ff4 (patch) | |
tree | 6ef9689e485f07ba958e181607a12bfc7c26285f /src | |
parent | 7fa1c07896a6ec184e665d4f86e7678fa88fef59 (diff) | |
download | nginx-9eaabc69ca4401b0a1fbfd27c2265213ab656ff4.tar.gz nginx-9eaabc69ca4401b0a1fbfd27c2265213ab656ff4.zip |
use sys_errlist[] in signal handler instead
of non Async-Signal-Safe strerror_r()
Diffstat (limited to 'src')
-rw-r--r-- | src/os/unix/ngx_errno.h | 14 | ||||
-rw-r--r-- | src/os/unix/ngx_process.c | 11 |
2 files changed, 19 insertions, 6 deletions
diff --git a/src/os/unix/ngx_errno.h b/src/os/unix/ngx_errno.h index 379f36777..ddc2b2761 100644 --- a/src/os/unix/ngx_errno.h +++ b/src/os/unix/ngx_errno.h @@ -64,10 +64,22 @@ u_char *ngx_strerror_r(int err, u_char *errstr, size_t size); /* Solaris and Tru64 UNIX have thread-safe strerror() */ -#define ngx_strerror_r(err, errstr, size) \ +#define ngx_strerror_r(err, errstr, size) \ ngx_cpystrn(errstr, (u_char *) strerror(err), size) #endif +#if (NGX_HAVE_SYS_ERRLIST) + +#define ngx_sigsafe_strerror(err) \ + (err > 0 && err < sys_nerr) ? sys_errlist[err] : "Unknown error" + +#else + +#define ngx_sigsafe_strerror(err) "" + +#endif + + #endif /* _NGX_ERRNO_H_INCLUDED_ */ diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c index f140d629b..0d08349ee 100644 --- a/src/os/unix/ngx_process.c +++ b/src/os/unix/ngx_process.c @@ -479,16 +479,17 @@ ngx_process_get_status(void) */ if (err == NGX_ECHILD) { - ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, errno, - "waitpid() failed"); + ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0, + "waitpid() failed (%d: %s)", + err, ngx_sigsafe_strerror(err)); return; } #endif - ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, errno, - "waitpid() failed"); - + ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, + "waitpid() failed (%d: %s)", + err, ngx_sigsafe_strerror(err)); return; } |