Commit cb27d1ec authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Sanitize close/recycle session logic a bit.


git-svn-id: http://www.varnish-cache.org/svn/trunk@182 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 51305b37
......@@ -60,8 +60,8 @@ extern struct stevedore *stevedore;
/* cache_acceptor.c */
void vca_write(struct sess *sp, void *ptr, size_t len);
void vca_flush(struct sess *sp);
void vca_retire_session(struct sess *sp);
void vca_recycle_session(struct sess *sp);
void vca_return_session(struct sess *sp);
void vca_close_session(struct sess *sp);
void VCA_Init(void);
/* cache_backend.c */
......
......@@ -66,8 +66,7 @@ vca_flush(struct sess *sp)
if (i != sp->mem->liov) {
VSL(SLT_SessionClose, sp->fd, "Premature %d of %d",
i, sp->mem->liov);
close(sp->fd);
sp->fd = -1;
vca_close_session(sp);
}
sp->mem->liov = 0;
sp->mem->niov = 0;
......@@ -178,24 +177,31 @@ vca_main(void *arg)
return ("FOOBAR");
}
/*--------------------------------------------------------------------*/
void
vca_recycle_session(struct sess *sp)
vca_close_session(struct sess *sp)
{
VSL(SLT_SessionReuse, sp->fd, "%s", sp->addr);
write(pipes[1], &sp, sizeof sp);
VSL(SLT_SessionClose, sp->fd, "%s", sp->addr);
close(sp->fd);
sp->fd = -1;
}
/*--------------------------------------------------------------------*/
void
vca_retire_session(struct sess *sp)
vca_return_session(struct sess *sp)
{
if (sp->http != NULL)
http_Delete(sp->http);
if (sp->fd >= 0) {
VSL(SLT_SessionClose, sp->fd, "%s", sp->addr);
close(sp->fd);
VSL(SLT_SessionReuse, sp->fd, "%s", sp->addr);
write(pipes[1], &sp, sizeof sp);
} else {
if (sp->http != NULL)
http_Delete(sp->http);
free(sp);
}
free(sp);
}
/*--------------------------------------------------------------------*/
......
......@@ -75,7 +75,6 @@ PipeSession(struct worker *w, struct sess *sp)
event_add(&e2.ev, NULL);
event_base_loop(w->eb, 0);
close (fd);
close (sp->fd);
vca_close_session(sp);
VBE_ClosedFd(fd_token);
sp->fd = -1;
}
......@@ -159,17 +159,13 @@ CacheWorker(void *priv)
if (http_GetHdr(sp->http, "Connection", &b) &&
!strcmp(b, "close")) {
VSL(SLT_SessionClose, sp->fd, "hdr");
close(sp->fd);
sp->fd = -1;
vca_close_session(sp);
}
AZ(pthread_mutex_lock(&sessmtx));
RelVCL(sp->vcl);
sp->vcl = NULL;
if (sp->fd < 0)
vca_retire_session(sp);
else
vca_recycle_session(sp);
vca_return_session(sp);
}
}
......@@ -179,7 +175,8 @@ DealWithSession(void *arg, int good)
struct sess *sp = arg;
if (!good) {
vca_retire_session(sp);
vca_close_session(sp);
vca_return_session(sp);
return;
}
AZ(pthread_mutex_lock(&sessmtx));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment