Re: вроде eval модуль сломался

Igor Sysoev igor на sysoev.ru
Пн Ноя 29 16:56:58 MSK 2010


On Mon, Nov 29, 2010 at 11:01:46AM +0000, Valery Kholodkov wrote:

> В таком случае см. коментарий китайского программиста:
> 
> https://github.com/vkholodkov/nginx-eval-module/commit/d4134c67c5e88701928a5629332541b28b5deb59
> 
> К сожалению, API, который использовался модулем, на rewrite-фазе изменился в 0.8.42. Я поговорил с автором и исправил согласно его рекомендациям. Однако, судя по моим ощущениям и коментариям других разработчиков это ничего не решает. Очень похоже, что мы друг друга не понимаем.

Прилагаемый патч возврщает обработку NGX_OK и NGX_DONE в rewrite-фазе.
Это место можно описать так:

     if(ctx->in_progress) {
        return NGX_DONE;
     }

так как до 0.8.42 NGX_DONE и NGX_AGAIN работали одинаково.


-- 
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
Index: src/http/ngx_http_core_module.c
===================================================================
--- src/http/ngx_http_core_module.c	(revision 3116)
+++ src/http/ngx_http_core_module.c	(working copy)
@@ -900,13 +900,22 @@
 
     rc = ph->handler(r);
 
+    if (rc == NGX_OK) {
+        r->phase_handler = ph->next;
+        return NGX_AGAIN;
+    }
+
     if (rc == NGX_DECLINED) {
         r->phase_handler++;
         return NGX_AGAIN;
     }
 
-    /* rc == NGX_OK || rc == NGX_ERROR || rc == NGX_HTTP_...  */
+    if (rc == NGX_DONE) {
+        return NGX_OK;
+    }
 
+    /* NGX_AGAIN || rc == NGX_ERROR || rc == NGX_HTTP_...  */
+
     ngx_http_finalize_request(r, rc);
 
     return NGX_OK;


Подробная информация о списке рассылки nginx-ru