Здравствуйте.<br><br>При использовании iphonовского клиента наткнулся на устойчивые падения в DAV модуле такого характера (бактрейс для nginx-1.2.1 с парой отладочных printf-ов, общая картина в 1.3.8 та же самая):<br>#0  0x08057494 in ngx_ext_rename_file (src=0x4, to=0xbfb3af54, ext=0xbfb3aedc) at src/core/ngx_file.c:545<br>
#1  0x080bb8ee in ngx_http_dav_put_handler (r=0x8c71598) at src/http/modules/ngx_http_dav_module.c:262<br>#2  0x0809590e in ngx_http_read_client_request_body (r=0x8c71598, post_handler=0x80bb64b <ngx_http_dav_put_handler>) at src/http/ngx_http_request_body.c:44<br>
#3  0x080bb5f1 in ngx_http_dav_handler (r=0x8c71598) at src/http/modules/ngx_http_dav_module.c:172<br>#4  0x08081103 in ngx_http_core_content_phase (r=0x8c71598, ph=0x8c86004) at src/http/ngx_http_core_module.c:1403<br>#5  0x0807febd in ngx_http_core_run_phases (r=0x8c71598) at src/http/ngx_http_core_module.c:877<br>
#6  0x0808c40f in ngx_http_request_handler (ev=0x8caf230) at src/http/ngx_http_request.c:1864<br>#7  0x08077095 in ngx_epoll_process_events (cycle=0x8c72828, timer=75000, flags=1) at src/event/modules/ngx_epoll_module.c:710<br>
#8  0x08069c6b in ngx_process_events_and_timers (cycle=0x8c72828) at src/event/ngx_event.c:247<br>#9  0x08075271 in ngx_worker_process_cycle (cycle=0x8c72828, data=0x0) at src/os/unix/ngx_process_cycle.c:806<br>#10 0x0807234f in ngx_spawn_process (cycle=0x8c72828, proc=0x8075124 <ngx_worker_process_cycle>, data=0x0, name=0x80e1e47 "worker process", respawn=-3) at src/os/unix/ngx_process.c:198<br>
#11 0x08074484 in ngx_start_worker_processes (cycle=0x8c72828, n=1, type=-3) at src/os/unix/ngx_process_cycle.c:365<br>#12 0x08073c07 in ngx_master_process_cycle (cycle=0x8c72828) at src/os/unix/ngx_process_cycle.c:137<br>
#13 0x0804ca97 in main (argc=5, argv=0xbfb3b4d4) at src/core/nginx.c:410<br><br>Автоматизированного тесткейса сделать не удалось, вопроизводил и удалял ручками.<br>Причина кроется в src/http/ngx_http_request_body.c в строке 42: при двух идущих «быстро» друг за другом PUT-запросах r->request_body сохранялся от прошлого запроса, а r->request_body->temp_file был равен NULL. В итоге без попытки вычитывания тела запроса шло исполнение post_handler, который в нашем случае ngx_http_dav_put_handler, где все благополучно падало, т. к. temp = &r->request_body->temp_file-><a href="http://file.name">file.name</a> указывал явно на левую область памяти.<br>
<br>Для меня все починилось дополнительной проверкой на NULL r->request_body->temp_file (патч для 1.3.8 прилагается). Не знаю насколько идеологически правилен этот фикс, но проблему с падением решает.<br><br>-- <br>
Regards,<br>Dmitry<br><br>