Пример #1
0
static void
vslr(enum VSL_tag_e tag, uint32_t vxid, const char *b, unsigned len)
{
	uint32_t *p;
	unsigned mlen;

	mlen = cache_param->shm_reclen;

	/* Truncate */
	if (len > mlen)
		len = mlen;

	p = vsl_get(len, 1, 0);

	memcpy(p + 2, b, len);
	vsl_hdr(tag, p, len, vxid);
}
Пример #2
0
void
VSL_Flush(struct vsl_log *vsl, int overflow)
{
	uint32_t *p;
	unsigned l;

	l = pdiff(vsl->wlb, vsl->wlp);
	if (l == 0)
		return;

	assert(l >= 8);

	p = vsl_get(l - 8, vsl->wlr, overflow);

	memcpy(p + 1, vsl->wlb + 1, l - 4);
	VWMB();
	p[0] = vsl->wlb[0];
	vsl->wlp = vsl->wlb;
	vsl->wlr = 0;
}
Пример #3
0
void
WSL_Flush(struct worker *wrk, int overflow)
{
	uint32_t *p;
	unsigned l;

	l = pdiff(wrk->wlb, wrk->wlp);
	if (l == 0)
		return;

	assert(l >= 8);

	p = vsl_get(l - 8, wrk->wlr, overflow);

	memcpy(p + 1, wrk->wlb + 1, l - 4);
	VWMB();
	p[0] = wrk->wlb[0];
	wrk->wlp = wrk->wlb;
	wrk->wlr = 0;
}