comparison src/http/ngx_http.c @ 454:a8424ffa495c NGINX_0_7_39

nginx 0.7.39 *) Bugfix: large response with SSI might hang, if gzipping was enabled; the bug had appeared in 0.7.28. Thanks to Artem Bokhan. *) Bugfix: a segmentation fault might occur in worker process, if short static variants are used in a "try_files" directive.
author Igor Sysoev <http://sysoev.ru>
date Mon, 02 Mar 2009 00:00:00 +0300
parents 76a79816b771
children bb941a2996a6
comparison
equal deleted inserted replaced
453:9ef0e36f3cd5 454:a8424ffa495c
1601 1601
1602 1602
1603 static ngx_int_t 1603 static ngx_int_t
1604 ngx_http_init_listening(ngx_conf_t *cf, ngx_http_conf_port_t *port) 1604 ngx_http_init_listening(ngx_conf_t *cf, ngx_http_conf_port_t *port)
1605 { 1605 {
1606 ngx_uint_t i, a, last, bind_wildcard; 1606 ngx_uint_t i, last, bind_wildcard;
1607 ngx_listening_t *ls; 1607 ngx_listening_t *ls;
1608 ngx_http_port_t *hport; 1608 ngx_http_port_t *hport;
1609 ngx_http_conf_addr_t *addr; 1609 ngx_http_conf_addr_t *addr;
1610 1610
1611 addr = port->addrs.elts; 1611 addr = port->addrs.elts;
1624 1624
1625 } else { 1625 } else {
1626 bind_wildcard = 0; 1626 bind_wildcard = 0;
1627 } 1627 }
1628 1628
1629 a = 0; 1629 i = 0;
1630 1630
1631 while (a < last) { 1631 while (i < last) {
1632 1632
1633 if (bind_wildcard && !addr[a].bind) { 1633 if (bind_wildcard && !addr[i].bind) {
1634 a++; 1634 i++;
1635 continue; 1635 continue;
1636 } 1636 }
1637 1637
1638 ls = ngx_http_add_listening(cf, &addr[a]); 1638 ls = ngx_http_add_listening(cf, &addr[i]);
1639 if (ls == NULL) { 1639 if (ls == NULL) {
1640 return NGX_ERROR; 1640 return NGX_ERROR;
1641 } 1641 }
1642 1642
1643 hport = ngx_pcalloc(cf->pool, sizeof(ngx_http_port_t)); 1643 hport = ngx_pcalloc(cf->pool, sizeof(ngx_http_port_t));
1645 return NGX_ERROR; 1645 return NGX_ERROR;
1646 } 1646 }
1647 1647
1648 ls->servers = hport; 1648 ls->servers = hport;
1649 1649
1650 hport->port = ntohs(port->port); 1650 if (i == last - 1) {
1651
1652 for (i = ls->addr_text.len - 1; i; i--) {
1653
1654 if (ls->addr_text.data[i] == ':') {
1655 hport->port_text.len = ls->addr_text.len - i;
1656 hport->port_text.data = &ls->addr_text.data[i];
1657 break;
1658 }
1659 }
1660
1661 if (a == last - 1) {
1662 hport->naddrs = last; 1651 hport->naddrs = last;
1663 1652
1664 } else { 1653 } else {
1665 hport->naddrs = 1; 1654 hport->naddrs = 1;
1666 a = 0; 1655 i = 0;
1667 } 1656 }
1668 1657
1669 switch (ls->sockaddr->sa_family) { 1658 switch (ls->sockaddr->sa_family) {
1670 1659
1671 #if (NGX_HAVE_INET6) 1660 #if (NGX_HAVE_INET6)
1821 vn = ngx_palloc(cf->pool, sizeof(ngx_http_virtual_names_t)); 1810 vn = ngx_palloc(cf->pool, sizeof(ngx_http_virtual_names_t));
1822 if (vn == NULL) { 1811 if (vn == NULL) {
1823 return NGX_ERROR; 1812 return NGX_ERROR;
1824 } 1813 }
1825 1814
1826 addrs[i].conf.virtual_names = vn; 1815 addrs[i].conf.core_srv_conf->virtual_names = vn;
1827 1816
1828 vn->names.hash = addr[i].hash; 1817 vn->names.hash = addr[i].hash;
1829 vn->names.wc_head = addr[i].wc_head; 1818 vn->names.wc_head = addr[i].wc_head;
1830 vn->names.wc_tail = addr[i].wc_tail; 1819 vn->names.wc_tail = addr[i].wc_tail;
1831 #if (NGX_PCRE) 1820 #if (NGX_PCRE)
1878 vn = ngx_palloc(cf->pool, sizeof(ngx_http_virtual_names_t)); 1867 vn = ngx_palloc(cf->pool, sizeof(ngx_http_virtual_names_t));
1879 if (vn == NULL) { 1868 if (vn == NULL) {
1880 return NGX_ERROR; 1869 return NGX_ERROR;
1881 } 1870 }
1882 1871
1883 addrs6[i].conf.virtual_names = vn; 1872 addrs6[i].conf.core_srv_conf->virtual_names = vn;
1884 1873
1885 vn->names.hash = addr[i].hash; 1874 vn->names.hash = addr[i].hash;
1886 vn->names.wc_head = addr[i].wc_head; 1875 vn->names.wc_head = addr[i].wc_head;
1887 vn->names.wc_tail = addr[i].wc_tail; 1876 vn->names.wc_tail = addr[i].wc_tail;
1888 #if (NGX_PCRE) 1877 #if (NGX_PCRE)