Lighttpd и mod_deflate

Делал несколько попыток использовать mod_deflate и всегда возникали проблемы. Или вообще не отображается страничка, или отображается, но не не завершается. В логе появляется запись:

XXXX-XX-XX YY:YY:YY (error) (mod_deflate.c:1021) flush error
XXXX-XX-XX YY:YY:YY (server.c:763) NOTE: a request for /readme.txt timed out after writing 10837 bytes. We waited 360 seconds. If this a problem increase server.max-write-idle
XXXX-XX-XX YY:YY:YY (trace) (server.c:772) (timeout)

Включаем режим отладки в модуле и видим интересную информацию:

XXXX-XX-XX YY:YY:YY (trace) (mod_deflate.c:929) compress: in_queue len=0
XXXX-XX-XX YY:YY:YY (trace) (mod_deflate.c:1003) compressed bytes: 0
XXXX-XX-XX YY:YY:YY (trace) (mod_deflate.c:1014) end: 1 - 0 - 7927
XXXX-XX-XX YY:YY:YY (error) (mod_deflate.c:1021) flush error

Строка с end расшифровывается: флаг окончания — размер на входе — размер на выходе.
А внутри стоит проверка на равенство размеров :(
Вот патчик:

--- src/mod_deflate.c.orig	2009-06-21 16:44:57.000000000 +0300
+++ src/mod_deflate.c	2009-06-28 10:02:12.715453990 +0300
@@ -1008,7 +1008,7 @@
 	}
 
 	/* check if we finished compressing all the content. */
-	end = (hctx->in->is_closed && hctx->in->bytes_in == hctx->in->bytes_out);
+	end = (hctx->in->is_closed && (hctx->in->bytes_in == hctx->in->bytes_out || hctx->in->bytes_in == 0));
 
 	if (p->conf.debug) {
 		TRACE("end: %d - %jd - %jd", hctx->in->is_closed, (intmax_t) hctx->in->bytes_in, (intmax_t) hctx->in->bytes_out);

Вроде бы проблема ушла. Надо тестировать.

Патч в виде файла

Теги:

Ваш отзыв