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);
}
Example #3
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);
}
Example #4
0
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);
}