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