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

Start sharing vsmw_clusters for static backends in same VCL.

parent 111a42f7
...@@ -42,6 +42,9 @@ ...@@ -42,6 +42,9 @@
#include "vtcp.h" #include "vtcp.h"
#include "vtim.h" #include "vtim.h"
#include "common/heritage.h"
#include "common/vsmw.h"
const void * const vrt_magic_string_end = &vrt_magic_string_end; const void * const vrt_magic_string_end = &vrt_magic_string_end;
const void * const vrt_magic_string_unset = &vrt_magic_string_unset; const void * const vrt_magic_string_unset = &vrt_magic_string_unset;
...@@ -628,10 +631,17 @@ VRT_purge(VRT_CTX, double ttl, double grace, double keep) ...@@ -628,10 +631,17 @@ VRT_purge(VRT_CTX, double ttl, double grace, double keep)
struct vsmw_cluster * v_matchproto_() struct vsmw_cluster * v_matchproto_()
VRT_VSM_Cluster_New(VRT_CTX, size_t sz) VRT_VSM_Cluster_New(VRT_CTX, size_t sz)
{ {
struct vsmw_cluster *vc;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
AN(sz); assert(sz > 0);
return ((void*)VRT_VSM_Cluster_New); AN(vsc_lock);
AN(vsc_unlock);
AN(heritage.proc_vsmw);
vsc_lock();
vc = VSMW_NewCluster(heritage.proc_vsmw, sz, "VSC_cluster");
vsc_unlock();
return (vc);
} }
void v_matchproto_() void v_matchproto_()
......
...@@ -75,6 +75,7 @@ struct vsmw_cluster { ...@@ -75,6 +75,7 @@ struct vsmw_cluster {
char *fn; char *fn;
size_t len; size_t len;
void *ptr; void *ptr;
size_t next;
int refs; int refs;
}; };
...@@ -239,12 +240,15 @@ VSMW_Allocv(struct vsmw *vsmw, struct vsmw_cluster *vc, ...@@ -239,12 +240,15 @@ VSMW_Allocv(struct vsmw *vsmw, struct vsmw_cluster *vc,
AZ(VSB_finish(vsmw->vsb)); AZ(VSB_finish(vsmw->vsb));
REPLACE(seg->id, VSB_data(vsmw->vsb)); REPLACE(seg->id, VSB_data(vsmw->vsb));
vc = VSMW_NewCluster(vsmw, 64 + len, class); if (vc == NULL)
vc = VSMW_NewCluster(vsmw, len, class);
AN(vc); AN(vc);
vc->refs++; vc->refs++;
seg->cluster = vc; seg->cluster = vc;
seg->off = 64; seg->off = vc->next;
vc->next += len;
assert(vc->next <= vc->len);
seg->ptr = seg->off + (char*)vc->ptr; seg->ptr = seg->off + (char*)vc->ptr;
VTAILQ_INSERT_TAIL(&vsmw->segs, seg, list); VTAILQ_INSERT_TAIL(&vsmw->segs, seg, list);
......
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