예제 #1
0
int
vmod_event_function(VRT_CTX, struct vmod_priv *vcl_priv, enum vcl_event_e e)
{
    switch (e) {
        case VCL_EVENT_LOAD:
            curl_global_init(CURL_GLOBAL_ALL);
            if (vmod_state.locks.refs == 0) {
                vmod_state.locks.script = Lck_CreateClass(
                    &vmod_state.locks.vsc_seg, "cfg.script");
                AN(vmod_state.locks.script);
            }
            vmod_state.locks.refs++;
            break;

        case VCL_EVENT_DISCARD:
            assert(vmod_state.locks.refs > 0);
            vmod_state.locks.refs--;
            if (vmod_state.locks.refs == 0) {
                Lck_DestroyClass(&vmod_state.locks.vsc_seg);
            }
            break;

        default:
            break;
    }

    return 0;
}
예제 #2
0
static void
sma_open(const struct stevedore *st)
{
	struct sma_sc *sma_sc;

	ASSERT_CLI();
	if (lck_sma == NULL)
		lck_sma = Lck_CreateClass("sma");
	CAST_OBJ_NOTNULL(sma_sc, st->priv, SMA_SC_MAGIC);
	Lck_New(&sma_sc->sma_mtx, lck_sma);
	sma_sc->stats = VSM_Alloc(sizeof *sma_sc->stats,
	    VSC_CLASS, VSC_type_sma, st->ident);
	memset(sma_sc->stats, 0, sizeof *sma_sc->stats);
	if (sma_sc->sma_max != SIZE_MAX)
		sma_sc->stats->g_space = sma_sc->sma_max;
}