Welcome! Log In Create A New Profile

Advanced

Re: nginx-0.8.30

Igor Sysoev
December 21, 2009 08:10AM
On Mon, Dec 21, 2009 at 02:41:38PM +0300, Maxim Dounin wrote:

> Hello!
>
> On Mon, Dec 21, 2009 at 01:46:39PM +0300, Igor Sysoev wrote:
>
> > On Mon, Dec 21, 2009 at 01:28:37PM +0300, Maxim Dounin wrote:
> >
> > > Hello!
> > >
> > > On Mon, Dec 21, 2009 at 03:36:32PM +0600, Denis F. Latypoff wrote:
> > >
> > > > Hello Andrew,
> > > >
> > > > Monday, December 21, 2009, 3:01:36 PM, you wrote:
> > > >
> > > > > Hello Igor,
> > > >
> > > > IS>> Изменения в nginx 0.8.30 15.12.2009
> > > > > у меня не собирается
> > > >
> > > > > CentOS 5.x / x64 / gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)
> > > >
> > > > > ./configure \
> > > > > --with-cc-opt="-Os" \
> > > > > --with-md5=../md5 \
> > > > > --with-md5-opt="-Os" \
> > > > > --with-md5-asm \
> > > > > --with-http_stub_status_module \
> > > > > --with-rtsig_module \
> > > > > --with-select_module \
> > > > > --with-poll_module \
> > > > > --with-http_ssl_module \
> > > > > --with-http_realip_module \
> > > > > --with-mail \
> > > > > --with-mail_ssl_module \
> > > > > --user=wwwrun \
> > > > > --group=www
> > > >
> > > >
> > > > > gcc -c -O -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter
> > > > > -Wunused-function -Wunused-variable -Wunused-value -Werror -g -Os -I
> > > > > src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules \
> > > > > -o objs/src/http/ngx_http_request.o \
> > > > > src/http/ngx_http_request.c
> > > > > cc1: warnings being treated as errors
> > > > > src/http/ngx_http_request.c: In function 'ngx_http_terminate_request':
> > > > > src/http/ngx_http_request.c:2064: warning: dereferencing
> > > > > type-punned pointer will break strict-aliasing rules
> > > >
> > > > > и похоже что дело в --with-cc-opt="-Os"
> > > >
> > > >
> > > > patch attached.
> > > >
> > > > --
> > > > Best regards,
> > > > Denis mailto:denis@gostats.ru
> > >
> > > > diff -ru nginx-0.8.30/src/http/ngx_http.h nginx-0.8.30.new/src/http/ngx_http.h
> > > > --- nginx-0.8.30/src/http/ngx_http.h 2009-11-30 19:15:10.000000000 +0600
> > > > +++ nginx-0.8.30.new/src/http/ngx_http.h 2009-12-21 15:34:54.000000000 +0600
> > > > @@ -94,7 +94,8 @@
> > > > void ngx_http_request_empty_handler(ngx_http_request_t *r);
> > > >
> > > >
> > > > -#define ngx_http_ephemeral(r) (ngx_http_ephemeral_t *) (&r->uri_start)
> > > > +#define ngx_http_ephemeral(r) \
> > > > + (ngx_http_ephemeral_t *) (u_char *) (&r->uri_start)
> > >
> > > IMHO, cast в (void *) тут был бы логичнее. Но у меня нет шанса
> > > проверить помогает он или нет, за неимением gcc 4.1.
> >
> > Это не только gcc 4.1, но на фрибсдшном наборе gcc это не воспроизводится.
>
> Это второй репорт который я видел про ngx_http_ephemeral(),
> предыдущий был тоже gcc 4.1. Если ты знаешь где ещё это вылезает
> - свисти, вдруг у меня завалялось. :)
>
> > Твой вариант с memcpy мне не нравится: оно не мешает при переконфигурации,
> > но как общее решение не подходит - зачем копировать лишнее в run-time.
>
> Там проблема в том что объект на стеке в той же функции, и
> соответственно гарантированно имеет effective type.
> Альтернативные варианты решения:
>
> 1. Аллоцировать динамически. Что кстати приведёт к
> гарантированно правильному выравниванию, и сюрпризов при
> преобразовании в sockaddr_in на strict alignment платформах
> гарантировано не будет.

Там проблема не в выравнивании, а вот в этом:
http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html
http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html

Причём, у меня такое ощущение, что в nginx'е нет мест, где оно бы помогло.
Я пробовал ставить restrict в функциях обработки строк - код не менялся.

> 2. Делать совместимые типы (совсем правильно). Собственно я не
> зря там спросил про sockaddr_storage.

А оно не поможет. Попробуй такое:

typedef struct {
u_char sockaddr[NGX_SOCKADDRLEN];
+ struct sockaddr_storage sockaddr0;


- sin = (struct sockaddr_in *) &lsopt.sockaddr;
+ sin = (struct sockaddr_in *) &lsopt.sockaddr0;

Кстати, sockaddr_storage - 128 байт, а sockaddr_un - 106.

> > Единственное, что я пока нашёл - это:
> >
> > --with-cc-opt="... -fno-strict-aliasing"
>
> Ну это-то очевидный способ.

И похоже, единственный.


--
Игорь Сысоев
http://sysoev.ru

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

nginx-0.8.30

Igor Sysoev December 15, 2009 10:22AM

Re: nginx-0.8.30

Timur Bakeyev December 16, 2009 12:36PM

Re: nginx-0.8.30

Andrew Sitnikov December 21, 2009 04:02AM

Re[2]: nginx-0.8.30

Denis F. Latypoff December 21, 2009 04:18AM

Re[2]: nginx-0.8.30

Denis F. Latypoff December 21, 2009 04:38AM

Re: nginx-0.8.30

Maxim Dounin December 21, 2009 05:30AM

Re[2]: nginx-0.8.30

Denis F. Latypoff December 21, 2009 05:44AM

Re: nginx-0.8.30

Maxim Dounin December 21, 2009 07:10AM

Re: nginx-0.8.30

Igor Sysoev December 21, 2009 05:48AM

Re: nginx-0.8.30

Maxim Dounin December 21, 2009 06:42AM

Re: nginx-0.8.30

Igor Sysoev December 21, 2009 08:10AM

Re: nginx-0.8.30

Maxim Dounin December 21, 2009 09:00AM

Re: nginx-0.8.30

Igor Sysoev December 21, 2009 09:42AM

Re: nginx-0.8.30

Maxim Dounin December 21, 2009 10:34AM

Re: nginx-0.8.30

Igor Sysoev December 21, 2009 10:50AM

Re: nginx-0.8.30

Andrew Sitnikov December 21, 2009 10:56AM

Re: nginx-0.8.30

Maxim Dounin December 21, 2009 11:48AM

Re: nginx-0.8.30

Andrew Sitnikov December 21, 2009 07:38AM

Re: nginx-0.8.30

Igor Sysoev December 21, 2009 07:52AM

Re: nginx-0.8.30

Maxim Dounin December 21, 2009 08:18AM

Re: nginx-0.8.30

Igor Sysoev December 21, 2009 08:28AM

Вчера nginx выдал интересный сбой.

nginx@rufox.ru December 24, 2009 02:16AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 281
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready