76b3cb
diff --git a/modules/fcgid/fcgid_proc_unix.c b/modules/fcgid/fcgid_proc_unix.c
76b3cb
index 218f3f7..8b69a89 100644
76b3cb
--- a/modules/fcgid/fcgid_proc_unix.c
76b3cb
+++ b/modules/fcgid/fcgid_proc_unix.c
76b3cb
@@ -762,14 +762,15 @@ apr_status_t proc_write_ipc(fcgid_ipc *ipc_handle,
76b3cb
     struct iovec vec[FCGID_VEC_COUNT];
76b3cb
     int nvec = 0;
76b3cb
     apr_bucket *e;
76b3cb
+    apr_bucket_brigade* tmpbb = apr_brigade_create(output_brigade->p,output_brigade->bucket_alloc);
76b3cb
 
76b3cb
-    for (e = APR_BRIGADE_FIRST(output_brigade);
76b3cb
-         e != APR_BRIGADE_SENTINEL(output_brigade);
76b3cb
-         e = APR_BUCKET_NEXT(e)) {
76b3cb
+    while (!APR_BRIGADE_EMPTY(output_brigade)) {
76b3cb
+        e = APR_BRIGADE_FIRST(output_brigade);
76b3cb
         apr_size_t len;
76b3cb
         const char* base;
76b3cb
 
76b3cb
         if (APR_BUCKET_IS_METADATA(e)) {
76b3cb
+            apr_bucket_delete(e);
76b3cb
             continue;
76b3cb
         }
76b3cb
 
76b3cb
@@ -780,6 +781,9 @@ apr_status_t proc_write_ipc(fcgid_ipc *ipc_handle,
76b3cb
             return rv;
76b3cb
         }
76b3cb
 
76b3cb
+        APR_BUCKET_REMOVE(e);
76b3cb
+        APR_BRIGADE_INSERT_TAIL(tmpbb, e);
76b3cb
+
76b3cb
         vec[nvec].iov_len = len;
76b3cb
         vec[nvec].iov_base = (char*) base;
76b3cb
         if (nvec == (FCGID_VEC_COUNT - 1)) {
76b3cb
@@ -789,6 +793,7 @@ apr_status_t proc_write_ipc(fcgid_ipc *ipc_handle,
76b3cb
                                FCGID_VEC_COUNT)) != APR_SUCCESS)
76b3cb
                 return rv;
76b3cb
             nvec = 0;
76b3cb
+            apr_brigade_cleanup(tmpbb);
76b3cb
         }
76b3cb
         else
76b3cb
             nvec++;
76b3cb
@@ -800,6 +805,7 @@ apr_status_t proc_write_ipc(fcgid_ipc *ipc_handle,
76b3cb
             return rv;
76b3cb
     }
76b3cb
 
76b3cb
+    apr_brigade_destroy(tmpbb);
76b3cb
     return APR_SUCCESS;
76b3cb
 }
76b3cb