static void* cooldown_thread(void *priv) { struct vrt_ctx ctx; AN(priv); INIT_OBJ(&ctx, VRT_CTX_MAGIC); ctx.vcl = (struct vcl*)priv; VTIM_sleep(vcl_release_delay); VRT_rel_vcl(&ctx); return (NULL); }
static int event_cold(VRT_CTX) { pthread_t thread; VSL(SLT_Debug, 0, "%s: VCL_EVENT_COLD", VCL_Name(ctx->vcl)); if (vcl_release_delay == 0.0) { VRT_rel_vcl(ctx); return (0); } AZ(pthread_create(&thread, NULL, cooldown_thread, ctx->vcl)); AZ(pthread_detach(thread)); return (0); }
static void* cooldown_thread(void *priv) { struct vrt_ctx ctx; struct priv_vcl *priv_vcl; CAST_OBJ_NOTNULL(priv_vcl, priv, PRIV_VCL_MAGIC); AN(priv_vcl->vcl); AN(priv_vcl->vclref); INIT_OBJ(&ctx, VRT_CTX_MAGIC); ctx.vcl = priv_vcl->vcl; VTIM_sleep(vcl_release_delay); VRT_rel_vcl(&ctx, &priv_vcl->vclref); priv_vcl->vcl = NULL; return (NULL); }
static int event_cold(VRT_CTX, const struct vmod_priv *priv) { pthread_t thread; struct priv_vcl *priv_vcl; CAST_OBJ_NOTNULL(priv_vcl, priv->priv, PRIV_VCL_MAGIC); AN(priv_vcl->vcl); AN(priv_vcl->vclref); VSL(SLT_Debug, 0, "%s: VCL_EVENT_COLD", VCL_Name(ctx->vcl)); if (vcl_release_delay == 0.0) { VRT_rel_vcl(ctx, &priv_vcl->vclref); priv_vcl->vcl = NULL; return (0); } AZ(pthread_create(&thread, NULL, cooldown_thread, priv_vcl)); AZ(pthread_detach(thread)); return (0); }