nginx-0.0.1-2003-11-11-00:09:22 import
diff --git a/src/http/modules/proxy/ngx_http_proxy_cache.c b/src/http/modules/proxy/ngx_http_proxy_cache.c
index 3c4f5ca..a8c9d77 100644
--- a/src/http/modules/proxy/ngx_http_proxy_cache.c
+++ b/src/http/modules/proxy/ngx_http_proxy_cache.c
@@ -288,6 +288,8 @@
         return;
     }
 
+    ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
+
     if (rc == NGX_DONE) {
         ft_type = NGX_HTTP_PROXY_FT_BUSY_LOCK;
 
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c
index ad719ca..ecfe658 100644
--- a/src/http/modules/proxy/ngx_http_proxy_handler.c
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.c
@@ -503,7 +503,7 @@
 {
     ngx_http_proxy_ctx_t  *p;
 
-    p = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
+    p = ngx_http_get_module_err_ctx(r, ngx_http_proxy_module);
 
     if (p == NULL) {
         *buf = '-';
@@ -520,11 +520,15 @@
 
     *buf++ = '/';
 
-    *buf++ = 'X';
+    *buf++ = '_';
 
     *buf++ = '/';
 
-    *buf++ = 'X';
+    *buf++ = '_';
+
+    *buf++ = '/';
+
+    *buf++ = '_';
 
     *buf++ = ' ';
 
@@ -554,6 +558,9 @@
         buf += ngx_snprintf(buf, NGX_TIME_LEN, TIME_FMT, p->state->expires);
     }
 
+    *buf++ = ' ';
+    *buf++ = '_';
+
     return buf;
 }
 
@@ -563,7 +570,7 @@
 {
     ngx_http_proxy_ctx_t  *p;
 
-    p = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
+    p = ngx_http_get_module_err_ctx(r, ngx_http_proxy_module);
 
     if (p == NULL || p->state->cache_state == 0) {
         *buf = '-';
@@ -580,7 +587,7 @@
 {
     ngx_http_proxy_ctx_t  *p;
 
-    p = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
+    p = ngx_http_get_module_err_ctx(r, ngx_http_proxy_module);
 
     if (p == NULL || p->state->reason == 0) {
         *buf = '-';
diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c
index d404993..0a5ecd2 100644
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -337,6 +337,8 @@
         return;
     }
 
+    ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
+
     if (rc == NGX_DONE) {
         ft_type = NGX_HTTP_PROXY_FT_BUSY_LOCK;
 
@@ -1053,27 +1055,24 @@
     if (p->upstream->peer.connection) {
         if (ep->upstream_done && p->cachable) {
             if (ngx_http_proxy_update_cache(p) == NGX_ERROR) {
-                ngx_http_busy_unlock_cachable(p->lcf->busy_lock, &p->busy_lock);
+                ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
                 ngx_http_proxy_finalize_request(p, 0);
                 return;
             }
 
-            ngx_http_busy_unlock_cachable(p->lcf->busy_lock, &p->busy_lock);
-
         } else if (ep->upstream_eof && p->cachable) {
 
             /* TODO: check length & update cache */
 
             if (ngx_http_proxy_update_cache(p) == NGX_ERROR) {
-                ngx_http_busy_unlock_cachable(p->lcf->busy_lock, &p->busy_lock);
+                ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
                 ngx_http_proxy_finalize_request(p, 0);
                 return;
             }
-
-            ngx_http_busy_unlock_cachable(p->lcf->busy_lock, &p->busy_lock);
         }
 
         if (ep->upstream_done || ep->upstream_eof || ep->upstream_error) {
+            ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
             ngx_http_proxy_close_connection(p);
         }
     }
@@ -1104,6 +1103,8 @@
 
 ngx_log_debug(p->request->connection->log, "next upstream: %d" _ ft_type);
 
+    ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
+
     if (ft_type != NGX_HTTP_PROXY_FT_HTTP_404) {
         ngx_event_connect_peer_failed(&p->upstream->peer);
     }