error when using memcached_pass + "if statement" that evaluates to true

Igor Sysoev is at rambler-co.ru
Wed Dec 26 13:12:05 MSK 2007


On Sat, Dec 22, 2007 at 05:52:25AM -0500, Larrytheliquid wrote:

> The following error occurs when any "if statement" evaluates to true inside
> of a context with a memcached_pass:
> 2007/12/22 05:47:42 [alert] 1333#0: worker process 1334 exited on signal 10
> 
> Here are some example files to demonstrate the error (remember to run
> memcached):
> 
> ------------------------------------------------------
> nginx.conf
> ------------------------------------------------------
> worker_processes  1;
> events {
>     worker_connections  256;
> }
> 
> http {
>     server {
>         listen 8084;
>         default_type text/html;
> 
>         location / {
>           # If you comment out this if statement, or change != to =, the
> error will not occur
>           if ($request != "") {
>             # The following error occurs when any "if statement"
>             # evaluates to true inside of a context with a memcached_pass:
>             # 2007/12/22 05:47:42 [alert] 1333#0: worker process 1334 exited
> on signal 10
>           }
> 
>           set $memcached_key "NOT_IN_CACHE";
>           memcached_pass localhost:11211;
>           proxy_intercept_errors  on;
>           error_page 404 502 = /cache_miss.html;
>         }
> 
>         location /cache_miss.html {
>           root /Users/larry/Sites/ngingx_request_uri;
>         }
>     }
> }

The attched patch shoudl fix the bug.


-- 
Igor Sysoev
http://sysoev.ru/en/
-------------- next part --------------
Index: src/http/modules/ngx_http_memcached_module.c
===================================================================
--- src/http/modules/ngx_http_memcached_module.c	(revision 1096)
+++ src/http/modules/ngx_http_memcached_module.c	(working copy)
@@ -524,8 +524,6 @@
      *     conf->upstream.schema = { 0, NULL };
      *     conf->upstream.uri = { 0, NULL };
      *     conf->upstream.location = NULL;
-     *
-     *     conf->index = 0;
      */
 
     conf->upstream.connect_timeout = NGX_CONF_UNSET_MSEC;
@@ -548,6 +546,8 @@
     conf->upstream.pass_request_headers = 0;
     conf->upstream.pass_request_body = 0;
 
+    conf->index = NGX_CONF_UNSET;
+
     return conf;
 }
 
@@ -582,6 +582,15 @@
                                        |NGX_HTTP_UPSTREAM_FT_OFF;
     }
 
+    if (conf->upstream.upstream == NULL) {
+        conf->upstream.upstream = prev->upstream.upstream;
+        conf->upstream.schema = prev->upstream.schema;
+    }
+
+    if (conf->index == NGX_CONF_UNSET) {
+        conf->index = prev->index;
+    }
+
     return NGX_CONF_OK;
 }
 


More information about the nginx mailing list