struct sess {
int fd;
+ unsigned xid;
/* formatted ascii client address */
char addr[VCA_ADDRBUFSIZE];
/* cache_backend.c */
void VBE_Init(void);
-int VBE_GetFd(struct backend *bp, void **ptr);
+int VBE_GetFd(struct backend *bp, void **ptr, unsigned xid);
void VBE_ClosedFd(void *ptr);
void VBE_RecycleFd(void *ptr);
*/
int
-VBE_GetFd(struct backend *bp, void **ptr)
+VBE_GetFd(struct backend *bp, void **ptr, unsigned xid)
{
struct vbe *vp;
struct vbe_conn *vc;
event_base_set(vbe_evb, &vc->ev);
}
*ptr = vc;
+ VSL(SLT_BackendXID, vc->fd, "%u", xid);
return (vc->fd);
}
time_t t_req, t_resp;
int body;
- fd = VBE_GetFd(sp->backend, &fd_token);
+ fd = VBE_GetFd(sp->backend, &fd_token, sp->xid);
assert(fd != -1);
VSL(SLT_Backend, sp->fd, "%d %s", fd, sp->backend->vcl_name);
}
hp->t = ++p;
-#if 0
-printf("Head:\n%#H\n", hp->s, hp->t - hp->s);
-printf("Tail:\n%#H\n", hp->t, hp->v - hp->t);
-#endif
-
event_del(&hp->ev);
if (hp->callback != NULL)
hp->callback(hp->arg, 1);
char *b;
int cls;
- fd = VBE_GetFd(sp->backend, &fd_token);
+ fd = VBE_GetFd(sp->backend, &fd_token, sp->xid);
assert(fd != -1);
http_BuildSbuf(fd, 1, w->sb, sp->http);
void *fd_token;
struct edir e1, e2;
- fd = VBE_GetFd(sp->backend, &fd_token);
+ fd = VBE_GetFd(sp->backend, &fd_token, sp->xid);
assert(fd != -1);
http_BuildSbuf(fd, 0, w->sb, sp->http); /* XXX: 0 ?? */
static TAILQ_HEAD(, sess) shd = TAILQ_HEAD_INITIALIZER(shd);
static pthread_cond_t shdcnd;
+static unsigned xids;
/*--------------------------------------------------------------------*/
vca_return_session(sp);
return;
}
+
+ /*
+ * No locking necessary, we're serialized in the acceptor thread
+ */
+ sp->xid = xids++;
+ VSL(SLT_XID, sp->fd, "%u", sp->xid);
+
VSL_stats->client_req++;
AZ(pthread_mutex_lock(&sessmtx));
TAILQ_INSERT_TAIL(&shd, sp, list);
for (i = 0; i < 5; i++)
AZ(pthread_create(&tp, NULL, CacheWorker, NULL));
AZ(pthread_detach(tp));
+ srandomdev();
+ xids = random();
}
SLTM(SessionReuse)
SLTM(SessionClose)
SLTM(BackendOpen)
+SLTM(BackendXID)
SLTM(BackendReuse)
SLTM(BackendClose)
SLTM(HttpError)
SLTM(BldHdr)
SLTM(LostHeader)
SLTM(VCL)
+SLTM(XID)