filter->ctx = st;
}
- register_data_filter(s, chn, filter);
-
return 1;
}
if (!(msg->chn->flags & CF_ISRESP) || !st)
return 1;
- st->hdrs_len = msg->sov;
-
+ if (st->first_block) {
+ register_data_filter(s, msg->chn, filter);
+ st->hdrs_len = msg->sov;
+ }
return 1;
}
* We need to skip the HTTP headers first, because we saved them in the
* http-response action.
*/
- if (!(msg->chn->flags & CF_ISRESP) || !st)
+ if (!(msg->chn->flags & CF_ISRESP) || !st) {
+ /* should never happen */
+ unregister_data_filter(s, msg->chn, filter);
return len;
+ }
if (!len) {
/* Nothing to forward */
}
else {
/* Forward data */
- if (filter->ctx && st->first_block) {
+ if (st->first_block) {
int to_append, append;
struct shared_block *fb;
if (!fb) {
shctx_unlock(shctx);
disable_cache_entry(st, filter, shctx);
+ unregister_data_filter(s, msg->chn, filter);
return len;
}
shctx_unlock(shctx);
/* Rewind the buffer to forward all data */
c_rew(msg->chn, st->hdrs_len);
st->hdrs_len = 0;
- if (ret < 0)
+ if (ret < 0) {
disable_cache_entry(st, filter, shctx);
+ unregister_data_filter(s, msg->chn, filter);
+ }
}
- else
+ else {
+ /* should never happen */
+ unregister_data_filter(s, msg->chn, filter);
ret = len;
+ }
}
if ((ret != len) ||