vfp_esi_end(struct sess *sp) { struct vsb *vsb; struct vef_priv *vef; ssize_t l; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); AN(sp->wrk->vep); vsb = VEP_Finish(sp); if (vsb != NULL) { l = VSB_len(vsb); assert(l > 0); /* XXX: This is a huge waste of storage... */ sp->obj->esidata = STV_alloc(sp, l); XXXAN(sp->obj->esidata); memcpy(sp->obj->esidata->ptr, VSB_data(vsb), l); sp->obj->esidata->len = l; VSB_delete(vsb); } if (sp->wrk->vgz_rx != NULL) VGZ_Destroy(&sp->wrk->vgz_rx); if (sp->wrk->vef_priv != NULL) { vef = sp->wrk->vef_priv; CHECK_OBJ_NOTNULL(vef, VEF_MAGIC); sp->wrk->vef_priv = NULL; VGZ_UpdateObj(vef->vgz, sp->obj); VGZ_Destroy(&vef->vgz); XXXAZ(vef->error); FREE_OBJ(vef); } return (0); }
vfp_esi_end(struct busyobj *bo) { struct vsb *vsb; struct vef_priv *vef; ssize_t l; int retval = 0; CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); AN(bo->vep); if (bo->state == BOS_FAILED) retval = -1; if (bo->vgz_rx != NULL && VGZ_Destroy(&bo->vgz_rx) != VGZ_END) retval = VFP_Error(bo, "Gunzip+ESI Failed at the very end"); vsb = VEP_Finish(bo); if (vsb != NULL) { if (!retval) { l = VSB_len(vsb); assert(l > 0); /* XXX: This is a huge waste of storage... */ bo->fetch_obj->esidata = STV_alloc(bo, l); if (bo->fetch_obj->esidata != NULL) { memcpy(bo->fetch_obj->esidata->ptr, VSB_data(vsb), l); bo->fetch_obj->esidata->len = l; } else { retval = VFP_Error(bo, "Could not allocate storage for esidata"); } } VSB_delete(vsb); } vef = bo->vef_priv; bo->vef_priv = NULL; CHECK_OBJ_NOTNULL(vef, VEF_MAGIC); if (vef->vgz != NULL) { VGZ_UpdateObj(vef->vgz, bo->fetch_obj); if (VGZ_Destroy(&vef->vgz) != VGZ_END) retval = VFP_Error(bo, "ESI+Gzip Failed at the very end"); } if (vef->ibuf != NULL) free(vef->ibuf); if (vef->ibuf2 != NULL) free(vef->ibuf2); FREE_OBJ(vef); return (retval); }
vfp_esi_end(struct worker *wrk) { struct vsb *vsb; struct vef_priv *vef; struct busyobj *bo; ssize_t l; int retval; CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); bo = wrk->busyobj; CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); AN(bo->vep); retval = bo->fetch_failed; if (bo->vgz_rx != NULL && VGZ_Destroy(&bo->vgz_rx, -1) != VGZ_END) retval = FetchError(wrk, "Gunzip+ESI Failed at the very end"); vsb = VEP_Finish(wrk); if (vsb != NULL) { if (!retval) { l = VSB_len(vsb); assert(l > 0); /* XXX: This is a huge waste of storage... */ bo->fetch_obj->esidata = STV_alloc(wrk, l); if (bo->fetch_obj->esidata != NULL) { memcpy(bo->fetch_obj->esidata->ptr, VSB_data(vsb), l); bo->fetch_obj->esidata->len = l; } else { retval = FetchError(wrk, "Could not allocate storage for esidata"); } } VSB_delete(vsb); } vef = bo->vef_priv; if (vef != NULL) { CHECK_OBJ_NOTNULL(vef, VEF_MAGIC); bo->vef_priv = NULL; VGZ_UpdateObj(vef->vgz, bo->fetch_obj); if (VGZ_Destroy(&vef->vgz, -1) != VGZ_END) retval = FetchError(wrk, "ESI+Gzip Failed at the very end"); FREE_OBJ(vef); } return (retval); }
static enum vfp_status vfp_esi_end(struct busyobj *bo, struct vef_priv *vef, enum vfp_status retval) { struct vsb *vsb; ssize_t l; CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(vef, VEF_MAGIC); vsb = VEP_Finish(vef->vep, bo); if (vsb != NULL) { if (retval == VFP_END) { l = VSB_len(vsb); assert(l > 0); /* XXX: This is a huge waste of storage... */ bo->fetch_obj->esidata = STV_alloc(bo, l); if (bo->fetch_obj->esidata != NULL) { memcpy(bo->fetch_obj->esidata->ptr, VSB_data(vsb), l); bo->fetch_obj->esidata->len = l; } else { retval = VFP_Error(bo, "Could not allocate storage for esidata"); } } VSB_delete(vsb); } if (vef->vgz != NULL) { VGZ_UpdateObj(vef->vgz, bo->fetch_obj); if (VGZ_Destroy(&vef->vgz) != VGZ_END) retval = VFP_Error(bo, "ESI+Gzip Failed at the very end"); } if (vef->ibuf != NULL) free(vef->ibuf); FREE_OBJ(vef); return (retval); }
static enum vfp_status vfp_esi_end(struct vfp_ctx *vc, struct vef_priv *vef, enum vfp_status retval) { struct vsb *vsb; ssize_t l; void *p; CHECK_OBJ_NOTNULL(vc, VFP_CTX_MAGIC); CHECK_OBJ_NOTNULL(vef, VEF_MAGIC); vsb = VEP_Finish(vef->vep); if (vsb != NULL) { if (retval == VFP_END) { l = VSB_len(vsb); assert(l > 0); p = ObjSetattr(vc->wrk, vc->oc, OA_ESIDATA, l, VSB_data(vsb)); if (p == NULL) { retval = VFP_Error(vc, "Could not allocate storage for esidata"); } } VSB_delete(vsb); } if (vef->vgz != NULL) { VGZ_UpdateObj(vc, vef->vgz, VUA_END_GZIP); if (VGZ_Destroy(&vef->vgz) != VGZ_END) retval = VFP_Error(vc, "ESI+Gzip Failed at the very end"); } if (vef->ibuf != NULL) free(vef->ibuf); FREE_OBJ(vef); return (retval); }