5 messages in ru.sysoev.nginxRe: [dev] change in ngx_conf_merge_pt...
FromSent OnAttachments
Manlio PerilloNov 24, 2007 9:25 am 
Igor SysoevNov 24, 2007 9:43 am 
Manlio PerilloNov 24, 2007 10:29 am 
Manlio PerilloNov 25, 2007 9:20 am 
Manlio PerilloNov 25, 2007 9:48 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [dev] change in ngx_conf_merge_ptr_value for 0.5.33Actions...
From:Manlio Perillo (manl@public.gmane.org)
Date:Nov 25, 2007 9:20:56 am
List:ru.sysoev.nginx

Igor Sysoev ha scritto:

On Sat, Nov 24, 2007 at 06:26:02PM +0100, Manlio Perillo wrote:

Igor, do you have made some changes in the ngx_conf_merge_ptr_value function?

In mod_wsgi I have: ngx_conf_merge_ptr_value(conf->callable_object, prev->callable_object, "application");

for directive wsgi_application_callable.

With 0.5.32 and 0.6.16, when the directive is not supplied, its value is "application".

With 0.5.33 it is NULL.

conf->callable_object is a char *.

Yes, it was changed (however, svn log says it was in 0.5.32 and 0.6.10):

#define ngx_conf_merge_ptr_value(conf, prev, default) \ - if (conf == NULL) { \ - conf = (prev == NULL) ? default : prev; \ + if (conf == NGX_CONF_UNSET_PTR) { \ + conf = (prev == NGX_CONF_UNSET_PTR) ? default : prev; \ }

There is somethig wrong, here. I'm using now 0.5.33.

In ngx_http_wsgi_create_loc_conf I set: wlcf->callable_object = NGX_CONF_UNSET_PTR;

and in ngx_http_wsgi_merge_loc_conf: ngx_conf_merge_ptr_value(conf->callable_object, prev->callable_object, "application");

When directive wsgi_callable_object is not defined, then it defaults to "application".

However if I define the directive in configuration file: location / { wsgi_alias /usr/local/nginx/nginx-simple.py; wsgi_callable_object application; }

I get a: 2007/11/25 18:07:08 [emerg] 19458#0: "wsgi_callable_object" directive is duplicate in nginx-simple.conf:51

To understand how this works, I have tested fastcgi_catch_stderr (not documented):

location /test { fastcgi_pass 127.0.0.1:9000; fastcgi_catch_stderr ops; }

but I get a segmentation fault:

(gdb) run -c nginx-simple.conf Starting program: /usr/local/nginx/sbin/nginx -c nginx-simple.conf Failed to read a valid object file image from memory. [Thread debugging using libthread_db enabled] [New Thread -1213540672 (LWP 19510)]

Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1213540672 (LWP 19510)] ngx_array_push (a=0xffffffff) at src/core/ngx_array.c:59 59 if (a->nelts == a->nalloc) { (gdb) bt #0 ngx_array_push (a=0xffffffff) at src/core/ngx_array.c:59 #1 0x08058761 in ngx_conf_set_str_array_slot (cf=0xbf83df4c, cmd=0x80ac618, conf=0x80cead4) at src/core/ngx_conf_file.c:935 #2 0x08059715 in ngx_conf_parse (cf=0xbf83df4c, filename=0x0) at src/core/ngx_conf_file.c:336 #3 0x0806b7f7 in ngx_http_core_location (cf=0xbf83df4c, cmd=0x80a7aac, dummy=0x80ccf34) at src/http/ngx_http_core_module.c:1915 #4 0x08059715 in ngx_conf_parse (cf=0xbf83df4c, filename=0x0) at src/core/ngx_conf_file.c:336 #5 0x0806ba25 in ngx_http_core_server (cf=0xbf83df4c, cmd=0x80a79b0, dummy=0x80c31f0) at src/http/ngx_http_core_module.c:1706 #6 0x08059715 in ngx_conf_parse (cf=0xbf83df4c, filename=0x0) at src/core/ngx_conf_file.c:336 #7 0x080682c1 in ngx_http_block (cf=0xbf83df4c, cmd=0x80a77e0, conf=0x80c2cd8) at src/http/ngx_http.c:218 #8 0x08059715 in ngx_conf_parse (cf=0xbf83df4c, filename=0x80c263c) at src/core/ngx_conf_file.c:336 #9 0x080571df in ngx_init_cycle (old_cycle=0xbf83dfbc) at src/core/ngx_cycle.c:216 #10 0x0804d8b9 in main (argc=3, argv=0xbf83e104) at src/core/nginx.c:291

So this seems a bug in the NGX_CONF_UNSET_PTR / ngx_conf_merge_ptr_value logic.