[4.0] 542e5c7 Treat missing t_end in varnishncsa as being the same as t_start

Martin Blix Grydeland martin at varnish-software.com
Tue Jun 24 11:31:57 CEST 2014


commit 542e5c70fa394a8c6ddf13d3be66536bfd92f957
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date:   Mon Jun 23 15:09:46 2014 +0200

    Treat missing t_end in varnishncsa as being the same as t_start
    
    This makes varnishncsa continue to log if the end timestamp should be missing for some reason.

diff --git a/bin/varnishncsa/varnishncsa.c b/bin/varnishncsa/varnishncsa.c
index 2ff1fc3..d26808e 100644
--- a/bin/varnishncsa/varnishncsa.c
+++ b/bin/varnishncsa/varnishncsa.c
@@ -50,6 +50,7 @@
 #include <stdint.h>
 #include <ctype.h>
 #include <time.h>
+#include <math.h>
 
 #include "base64.h"
 #include "vapi/vsm.h"
@@ -243,20 +244,27 @@ format_time(const struct format *format)
 	struct tm tm;
 
 	CHECK_OBJ_NOTNULL(format, FORMAT_MAGIC);
-	if (CTX.frag[F_tstart].gen != CTX.gen ||
-	    CTX.frag[F_tend].gen != CTX.gen) {
+	if (CTX.frag[F_tstart].gen == CTX.gen) {
+		t_start = strtod(CTX.frag[F_tstart].b, &p);
+		if (p != CTX.frag[F_tstart].e)
+			t_start = NAN;
+	} else
+		t_start = NAN;
+	if (isnan(t_start)) {
+		/* Missing t_start is a no go */
 		if (format->string == NULL)
 			return (-1);
 		AZ(VSB_cat(CTX.vsb, format->string));
 		return (0);
 	}
 
-	t_start = strtod(CTX.frag[F_tstart].b, &p);
-	if (p != CTX.frag[F_tstart].e)
-		return (-1);
-	t_end = strtod(CTX.frag[F_tend].b, &p);
-	if (p != CTX.frag[F_tend].e)
-		return (-1);
+	/* Missing t_end defaults to t_start */
+	if (CTX.frag[F_tend].gen == CTX.gen) {
+		t_end = strtod(CTX.frag[F_tend].b, &p);
+		if (p != CTX.frag[F_tend].e)
+			t_end = t_start;
+	} else
+		t_end = t_start;
 
 	switch (format->time_type) {
 	case 'D':



More information about the varnish-commit mailing list