diff src/http/ngx_http.c @ 3229:a632dc9f3e73

fix r3225 and r3227: preserve default_server bit during listen options overwriting
author Igor Sysoev <igor@sysoev.ru>
date Thu, 22 Oct 2009 10:17:54 +0000
parents a610008bdc1a
children a7491af45540
line wrap: on
line diff
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -1167,7 +1167,7 @@ ngx_http_add_addresses(ngx_conf_t *cf, n
 {
     u_char                *p;
     size_t                 len, off;
-    ngx_uint_t             i;
+    ngx_uint_t             i, default_server;
     struct sockaddr       *sa;
     ngx_http_conf_addr_t  *addr;
 
@@ -1209,6 +1209,9 @@ ngx_http_add_addresses(ngx_conf_t *cf, n
             return NGX_ERROR;
         }
 
+        /* preserve default_server bit during listen options overwriting */
+        default_server = addr[i].opt.default_server;
+
         if (lsopt->set) {
 
             if (addr[i].opt.set) {
@@ -1224,15 +1227,18 @@ ngx_http_add_addresses(ngx_conf_t *cf, n
 
         if (lsopt->default_server) {
 
-            if (addr[i].opt.default_server) {
+            if (default_server) {
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                         "a duplicate default server for %s", addr[i].opt.addr);
                 return NGX_ERROR;
             }
 
+            default_server = 1;
             addr[i].default_server = cscf;
         }
 
+        addr[i].opt.default_server = default_server;
+
         return NGX_OK;
     }