Mercurial > hg > nginx
view src/os/unix/ngx_linux_init.c @ 5392:f1caf7b8ae1d
Upstream: subrequest_in_memory fix.
With previous code only part of u->buffer might be emptied in case
of special responses, resulting in partial responses seen by SSI set
in case of simple protocols, or spurious errors like "upstream sent
invalid chunked response" in case of complex ones.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 27 Sep 2013 16:50:26 +0400 |
parents | d620f497c50f |
children | adba26ff70b5 |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #include <ngx_config.h> #include <ngx_core.h> u_char ngx_linux_kern_ostype[50]; u_char ngx_linux_kern_osrelease[50]; int ngx_linux_rtsig_max; static ngx_os_io_t ngx_linux_io = { ngx_unix_recv, ngx_readv_chain, ngx_udp_unix_recv, ngx_unix_send, #if (NGX_HAVE_SENDFILE) ngx_linux_sendfile_chain, NGX_IO_SENDFILE #else ngx_writev_chain, 0 #endif }; ngx_int_t ngx_os_specific_init(ngx_log_t *log) { struct utsname u; if (uname(&u) == -1) { ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "uname() failed"); return NGX_ERROR; } (void) ngx_cpystrn(ngx_linux_kern_ostype, (u_char *) u.sysname, sizeof(ngx_linux_kern_ostype)); (void) ngx_cpystrn(ngx_linux_kern_osrelease, (u_char *) u.release, sizeof(ngx_linux_kern_osrelease)); #if (NGX_HAVE_RTSIG) { int name[2]; size_t len; ngx_err_t err; name[0] = CTL_KERN; name[1] = KERN_RTSIGMAX; len = sizeof(ngx_linux_rtsig_max); if (sysctl(name, 2, &ngx_linux_rtsig_max, &len, NULL, 0) == -1) { err = ngx_errno; if (err != NGX_ENOTDIR && err != NGX_ENOSYS) { ngx_log_error(NGX_LOG_ALERT, log, err, "sysctl(KERN_RTSIGMAX) failed"); return NGX_ERROR; } ngx_linux_rtsig_max = 0; } } #endif ngx_os_io = ngx_linux_io; return NGX_OK; } void ngx_os_specific_status(ngx_log_t *log) { ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s", ngx_linux_kern_ostype, ngx_linux_kern_osrelease); #if (NGX_HAVE_RTSIG) ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d", ngx_linux_rtsig_max); #endif }