Mercurial > hg > nginx-vendor-0-8
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) |