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); }
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; }
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; }