[master] dbd35b950 vmod_debug: obj fini test code to macro & unify

Nils Goroll nils.goroll at uplex.de
Sat Jan 16 10:46:07 UTC 2021


commit dbd35b9506919e6ba5743fcfee7fdbf034f737f4
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Sat Jan 16 11:17:39 2021 +0100

    vmod_debug: obj fini test code to macro & unify
    
    - use a custom fini function for all priv* tests
    - unify naming to _fini
    - move common code to macro
    
    Mostly taken from #3472 to slim that PR

diff --git a/bin/varnishtest/tests/r02451.vtc b/bin/varnishtest/tests/r02451.vtc
index 80e197939..50bf1c71b 100644
--- a/bin/varnishtest/tests/r02451.vtc
+++ b/bin/varnishtest/tests/r02451.vtc
@@ -54,7 +54,7 @@ logexpect l1 -v v1 -g raw -d 1 {
 	expect 0 *    Debug             {^objx.priv_task.*"something to remember".$}
 	expect 0 *    VCL_Log           {^obj something to remember}
 	# string stored in obj priv_task has already been freed
-	expect ? *    Debug             {^priv_task_free}
+	expect ? *    Debug             {^priv_task_fini}
 	expect ? *    Debug             {^obj_priv_task_fini}
 	expect 0 *    Debug             {^vcl1: VCL_EVENT_WARM}
 } -start
diff --git a/bin/varnishtest/tests/v00041.vtc b/bin/varnishtest/tests/v00041.vtc
index f2b285277..88a869b9c 100644
--- a/bin/varnishtest/tests/v00041.vtc
+++ b/bin/varnishtest/tests/v00041.vtc
@@ -120,7 +120,7 @@ logexpect l0 -v v1 -g raw -d 1 -m -q "vxid == 0" {
 	expect 0 =    VCL_Log		{^objc initX}
 	expect 0 =    Debug		{^objb.priv_task.. = .*"initY"}
 	expect 0 =    VCL_Log		{^objb initY}
-	expect ? =    Debug		{^priv_task_free}
+	expect ? =    Debug		{^priv_task_fini}
 	expect ? =    Debug		{^obj_priv_task_fini.*"initX"}
 	expect ? =    Debug		{^obj_priv_task_fini.*"initY"}
 	expect 0 =    Debug		{^vcl1: VCL_EVENT_WARM}
@@ -134,10 +134,10 @@ logexpect l0 -v v1 -g raw -d 1 -m -q "vxid == 0" {
 	expect 0 =    Debug		{^test_priv_task.*exists.$}
 	# client task can race with backend fini, so all of these are
 	# in any order (? = alternatives)
-	expect ? =    Debug		{^priv_task_free}
+	expect ? =    Debug		{^priv_task_fini}
 	expect ? =    Debug		{^obj_priv_task_fini.*"r1002"}
 	expect ? =    Debug		{^test_priv_task.*exists}
-	expect ? =    Debug		{^priv_task_free}
+	expect ? =    Debug		{^priv_task_fini}
 	expect ? =    Debug		{^obj_priv_task_fini.*"d1001"}
 
 	# 1003, but need to include in our alt to tolerate race
@@ -160,7 +160,7 @@ logexpect l0 -v v1 -g raw -d 1 -m -q "vxid == 0" {
 	expect 0 =    Debug		{^test_priv_task.*update.$}
 	expect 0 =    Debug		{^test_priv_task.*exists.$}
 	expect 0 =    Debug		{^objc.priv_task.. = NULL}
-	expect 0 =    Debug		{^priv_task_free}
+	expect 0 =    Debug		{^priv_task_fini}
 	expect 0 =    VCL_Log		{^func cleaning up}
 	expect 0 =    VCL_Log		{^obj }
 	expect 0 =    CLI		{^Wr 200 0 }
diff --git a/vmod/vmod_debug.c b/vmod/vmod_debug.c
index 997dfe33a..e27e6d5cc 100644
--- a/vmod/vmod_debug.c
+++ b/vmod/vmod_debug.c
@@ -225,11 +225,31 @@ xyzzy_author(VRT_CTX, VCL_ENUM person, VCL_ENUM someone)
 	WRONG("Illegal VMOD enum");
 }
 
-static const struct vmod_priv_methods xyzzy_test_priv_call_methods[1] = {{
-		.magic = VMOD_PRIV_METHODS_MAGIC,
-		.type = "debug_test_priv_call",
-		.fini = free
-}};
+#define AN0(x) (void) 0
+#define AN1(x) AN(x)
+#define PRIV_FINI(name, assert)						\
+static void v_matchproto_(vmod_priv_fini_f)				\
+priv_ ## name ## _fini(void *ptr)					\
+{									\
+	const char * const fmt = "priv_" #name "_fini(%p)";		\
+									\
+	AN ## assert (ptr);						\
+	VSL(SLT_Debug, 0, fmt, ptr);					\
+	free(ptr);							\
+}									\
+									\
+static const struct vmod_priv_methods					\
+xyzzy_test_priv_ ## name ## _methods[1] = {{				\
+		.magic = VMOD_PRIV_METHODS_MAGIC,			\
+		.type = "debug_test_priv_" #name,			\
+		.fini = priv_ ## name ## _fini				\
+	}};
+PRIV_FINI(call, 0)
+PRIV_FINI(task, 1)
+PRIV_FINI(top, 1)
+#undef PRIV_FINI
+#undef AN0
+#undef AN1
 
 VCL_VOID v_matchproto_(td_debug_test_priv_call)
 xyzzy_test_priv_call(VRT_CTX, struct vmod_priv *priv)
@@ -252,20 +272,6 @@ xyzzy_test_priv_task_get(VRT_CTX)
 	AZ(VRT_priv_task_get(ctx, NULL));
 }
 
-static void
-priv_task_free(void *ptr)
-{
-	AN(ptr);
-	VSL(SLT_Debug, 0, "priv_task_free(%p)", ptr);
-	free(ptr);
-}
-
-static const struct vmod_priv_methods xyzzy_test_priv_task_methods[1] = {{
-		.magic = VMOD_PRIV_METHODS_MAGIC,
-		.type = "debug_test_priv_task",
-		.fini = priv_task_free
-}};
-
 VCL_STRING v_matchproto_(td_debug_test_priv_task)
 xyzzy_test_priv_task(VRT_CTX, struct vmod_priv *priv, VCL_STRING s)
 {
@@ -295,12 +301,6 @@ xyzzy_test_priv_task(VRT_CTX, struct vmod_priv *priv, VCL_STRING s)
 	return (priv->priv);
 }
 
-static const struct vmod_priv_methods xyzzy_test_priv_top_methods[1] = {{
-		.magic = VMOD_PRIV_METHODS_MAGIC,
-		.type = "debug_test_priv_top",
-		.fini = free
-}};
-
 VCL_STRING v_matchproto_(td_debug_test_priv_top)
 xyzzy_test_priv_top(VRT_CTX, struct vmod_priv *priv, VCL_STRING s)
 {
@@ -403,7 +403,7 @@ xyzzy_fail2(VRT_CTX)
 }
 
 static void v_matchproto_(vmod_priv_fini_f)
-priv_vcl_free(void *priv)
+priv_vcl_fini(void *priv)
 {
 	struct priv_vcl *priv_vcl;
 
@@ -422,8 +422,8 @@ priv_vcl_free(void *priv)
 
 static const struct vmod_priv_methods priv_vcl_methods[1] = {{
 		.magic = VMOD_PRIV_METHODS_MAGIC,
-		.type = "debug_priv_vcl_free",
-		.fini = priv_vcl_free
+		.type = "debug_priv_vcl_fini",
+		.fini = priv_vcl_fini
 }};
 
 static int
diff --git a/vmod/vmod_debug_obj.c b/vmod/vmod_debug_obj.c
index 097a74f99..8c0e60070 100644
--- a/vmod/vmod_debug_obj.c
+++ b/vmod/vmod_debug_obj.c
@@ -152,18 +152,25 @@ xyzzy_obj_test_priv_vcl(VRT_CTX,
 	xyzzy_test_priv_vcl(ctx, priv);
 }
 
-static void
-obj_priv_task_fini(void *ptr)
-{
-	AN(ptr);
-	VSL(SLT_Debug, 0, "obj_priv_task_fini(%p = \"%s\")", ptr, (char *)ptr);
-}
-
-static const struct vmod_priv_methods xyzzy_obj_test_priv_task_methods[1] = {{
-		.magic = VMOD_PRIV_METHODS_MAGIC,
-		.type = "debug_obj_test_priv_task",
-		.fini = obj_priv_task_fini
-}};
+#define PRIV_FINI(name)						\
+static void v_matchproto_(vmod_priv_fini_f)				\
+obj_priv_ ## name ## _fini(void *ptr)					\
+{									\
+	const char * const fmt = "obj_priv_" #name "_fini(%p = \"%s\")"; \
+									\
+	AN(ptr);							\
+	VSL(SLT_Debug, 0, fmt, ptr, ptr);				\
+}									\
+									\
+static const struct vmod_priv_methods					\
+xyzzy_obj_test_priv_ ## name ## _methods[1] = {{			\
+		.magic = VMOD_PRIV_METHODS_MAGIC,			\
+		.type = "debug_obj_test_priv_" #name,			\
+		.fini = obj_priv_ ## name ## _fini			\
+	}};
+PRIV_FINI(task)
+PRIV_FINI(top)
+#undef PRIV_FINI
 
 VCL_STRING v_matchproto_()
 xyzzy_obj_test_priv_task(VRT_CTX, struct xyzzy_debug_obj *o, VCL_STRING s)
@@ -216,19 +223,6 @@ xyzzy_obj_test_priv_task(VRT_CTX, struct xyzzy_debug_obj *o, VCL_STRING s)
 	return (p->priv);
 }
 
-static void
-obj_priv_top_fini(void *ptr)
-{
-	AN(ptr);
-	VSL(SLT_Debug, 0, "obj_priv_top_fini(%p = \"%s\")", ptr, (char *)ptr);
-}
-
-static const struct vmod_priv_methods xyzzy_obj_test_priv_top_methods[1] = {{
-		.magic = VMOD_PRIV_METHODS_MAGIC,
-		.type = "debug_obj_test_priv_top",
-		.fini = obj_priv_top_fini
-}};
-
 VCL_STRING v_matchproto_()
 xyzzy_obj_test_priv_top(VRT_CTX, struct xyzzy_debug_obj *o, VCL_STRING s)
 {


More information about the varnish-commit mailing list