Re: Модуль mp4: 500 Internal Server, pread() failed (22: Invalid argument),
Igor Sysoev
igor на sysoev.ru
Пн Ноя 7 14:49:55 UTC 2011
On Sat, Nov 05, 2011 at 12:50:35PM +0400, Igor Sysoev wrote:
> On Fri, Nov 04, 2011 at 11:09:02PM +0200, Андрей Василишин wrote:
> > 04.11.2011 22:35, bsyomov пишет:
> > > Аналогичная ситуация, при включённом aio
> > > одновременно с mp4 nginx 1.1.6 с http_mp4_module,
> > > проблема решается отключением aio.
> > > Кстати, ровно та же проблема
> > > наблюдалась и с nginx_mod_h264_streaming от
> > > http://h264.code-shop.com
> >
> > Посмотрел свой уже работающий конфиг, таки да, собрал нгинкс с
> > nginx_mod_h264_streaming и отключил аио.
>
> Скорее всего, используется open_file_cache. Должно помочь, если
> его выключить:
>
> location ~ \.mp4 {
> open_file_cache off;
> ...
Патч.
--
Igor Sysoev
-------------- next part --------------
Index: src/http/modules/ngx_http_mp4_module.c
===================================================================
--- src/http/modules/ngx_http_mp4_module.c (revision 4264)
+++ src/http/modules/ngx_http_mp4_module.c (working copy)
@@ -434,7 +434,7 @@
ngx_memzero(&of, sizeof(ngx_open_file_info_t));
of.read_ahead = clcf->read_ahead;
- of.directio = NGX_MAX_OFF_T_VALUE;
+ of.directio = clcf->directio;
of.valid = clcf->open_file_cache_valid;
of.min_uses = clcf->open_file_cache_min_uses;
of.errors = clcf->open_file_cache_errors;
@@ -554,25 +554,6 @@
log->action = "sending mp4 to client";
- if (clcf->directio <= of.size) {
-
- /*
- * DIRECTIO is set on transfer only
- * to allow kernel to cache "moov" atom
- */
-
- if (ngx_directio_on(of.fd) == NGX_FILE_ERROR) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
- ngx_directio_on_n " \"%s\" failed", path.data);
- }
-
- of.is_directio = 1;
-
- if (mp4) {
- mp4->file.directio = 1;
- }
- }
-
r->headers_out.status = NGX_HTTP_OK;
r->headers_out.last_modified_time = of.mtime;
Подробная информация о списке рассылки nginx-ru