Commit 674f4387 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Add functions for allocating and freeing bereq structures.


git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@1631 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent f3f64c26
......@@ -184,6 +184,14 @@ struct workreq {
/* Backend Connection ------------------------------------------------*/
struct bereq {
unsigned magic;
#define BEREQ_MAGIC 0x3b6d250c
TAILQ_ENTRY(bereq) list;
struct ws ws[1];
struct http http[1];
};
struct vbe_conn {
unsigned magic;
#define VBE_CONN_MAGIC 0x0c5e6592
......@@ -362,6 +370,8 @@ void VBE_Init(void);
struct vbe_conn *VBE_GetFd(struct sess *sp);
void VBE_ClosedFd(struct worker *w, struct vbe_conn *vc, int already);
void VBE_RecycleFd(struct worker *w, struct vbe_conn *vc);
struct bereq *vbe_new_bereq(void);
void vbe_free_bereq(struct bereq *bereq);
/* cache_ban.c */
void BAN_Init(void);
......
......@@ -59,6 +59,7 @@
/* A backend IP */
static TAILQ_HEAD(,vbe_conn) vbe_head = TAILQ_HEAD_INITIALIZER(vbe_head);
static TAILQ_HEAD(,bereq) bereq_head = TAILQ_HEAD_INITIALIZER(bereq_head);
static MTX vbemtx;
......@@ -76,6 +77,43 @@ Uptime(void)
/*--------------------------------------------------------------------*/
struct bereq *
vbe_new_bereq(void)
{
struct bereq *bereq;
volatile unsigned space;
LOCK(&vbemtx);
bereq = TAILQ_FIRST(&bereq_head);
if (bereq != NULL)
TAILQ_REMOVE(&bereq_head, bereq, list);
UNLOCK(&vbemtx);
if (bereq == NULL) {
space = params->mem_workspace;
bereq = calloc(sizeof *bereq + space, 1);
if (bereq == NULL)
return (NULL);
bereq->magic = BEREQ_MAGIC;
WS_Init(bereq->ws, bereq + 1, space);
}
WS_Reset(bereq->ws);
return (bereq);
}
/*--------------------------------------------------------------------*/
/* XXX: no backpressure on pool size */
void
vbe_free_bereq(struct bereq *bereq)
{
LOCK(&vbemtx);
TAILQ_INSERT_HEAD(&bereq_head, bereq, list);
UNLOCK(&vbemtx);
}
/*--------------------------------------------------------------------*/
static struct vbe_conn *
vbe_new_conn(void)
{
......
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