[master] 9588cfe7c Simple STV temp buffer implementation

Dridi Boukelmoune dridi.boukelmoune at gmail.com
Mon Aug 30 08:31:06 UTC 2021


commit 9588cfe7c925081a5eeaa1f8ee6c6c949b92d519
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date:   Tue Jun 22 11:48:55 2021 +0200

    Simple STV temp buffer implementation

diff --git a/bin/varnishd/storage/storage_simple.c b/bin/varnishd/storage/storage_simple.c
index 7114398d8..bf7fc37b7 100644
--- a/bin/varnishd/storage/storage_simple.c
+++ b/bin/varnishd/storage/storage_simple.c
@@ -47,7 +47,11 @@
 /*-------------------------------------------------------------------*/
 
 static struct storage *
-sml_stv_alloc(const struct stevedore *stv, ssize_t size, int flags)
+objallocwithnuke(struct worker *, const struct stevedore *, ssize_t size,
+    int flags);
+
+static struct storage *
+sml_stv_alloc(const struct stevedore *stv, size_t size, int flags)
 {
 	struct storage *st;
 
@@ -161,6 +165,39 @@ SML_allocobj(struct worker *wrk, const struct stevedore *stv,
 	return (1);
 }
 
+void * v_matchproto_(storage_allocbuf_t)
+SML_AllocBuf(struct worker *wrk, const struct stevedore *stv, size_t size,
+    uintptr_t *ppriv)
+{
+	struct storage *st;
+
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+	CHECK_OBJ_NOTNULL(stv, STEVEDORE_MAGIC);
+	AN(ppriv);
+
+	if (size > UINT_MAX)
+		return (NULL);
+	st = objallocwithnuke(wrk, stv, size, 0);
+	if (st == NULL)
+		return (NULL);
+	assert(st->space >= size);
+	st->len = size;
+	*ppriv = (uintptr_t)st;
+	return (st->ptr);
+}
+
+void v_matchproto_(storage_freebuf_t)
+SML_FreeBuf(struct worker *wrk, const struct stevedore *stv, uintptr_t priv)
+{
+	struct storage *st;
+
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+	CHECK_OBJ_NOTNULL(stv, STEVEDORE_MAGIC);
+
+	CAST_OBJ_NOTNULL(st, (void *)priv, STORAGE_MAGIC);
+	sml_stv_free(stv, st);
+}
+
 /*---------------------------------------------------------------------
  */
 
diff --git a/bin/varnishd/storage/storage_simple.h b/bin/varnishd/storage/storage_simple.h
index 4e63efb9d..3f288aef7 100644
--- a/bin/varnishd/storage/storage_simple.h
+++ b/bin/varnishd/storage/storage_simple.h
@@ -68,6 +68,9 @@ extern const struct obj_methods SML_methods;
 
 struct object *SML_MkObject(const struct stevedore *, struct objcore *,
     void *ptr);
+void *SML_AllocBuf(struct worker *, const struct stevedore *, size_t,
+    uintptr_t *);
+void SML_FreeBuf(struct worker *, const struct stevedore *, uintptr_t);
 
 storage_allocobj_f SML_allocobj;
 storage_panic_f SML_panic;


More information about the varnish-commit mailing list