Steven Dake wrote:
> _logsys_log_printf should duplicate the code in logsys_log_vprintf and
> not call logsys_log_vprintf directly.  This api is called hundreds of
> thousands of times in a 1-2 minute run and as is can consume 1.5% of the
> cpu utilization.  I don't want to make it worse.

Requiring copy/paste.  Urgh.
Normally I ignore the "this single additional function call might
be expensive" argument, unless it is accompanied by profiling results.

However, here I'll presume you know what you're talking about
and propose the following, to ensure the copies never diverge.

With this tiny rule, "make check" will now ensure that those
two functions remain essentially identical.  I.e., if one is
changed, the other must be changed in exactly the same way,
comments included.

Jim

>From 69ca9adb6775772d37626548a9eef8c4d0d37f80 Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Thu, 23 Apr 2009 13:25:46 +0200
Subject: [PATCH] exec/Makefile.am: require that copied code stays in sync

* exec/Makefile.am (check_logsys_log_printf_functions): New rule.
(check): Depend on check_logsys_log_printf_functions.
---
 exec/Makefile.am |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/exec/Makefile.am b/exec/Makefile.am
index 38104d4..4b1abba 100644
--- a/exec/Makefile.am
+++ b/exec/Makefile.am
@@ -135,3 +135,14 @@ uninstall-local:

 clean-local:
        rm -f corosync *.o *.lcrso gmon.out *.da *.bb *.bbg *.so*
+
+# Since we're requiring that _logsys_log_printf and _logsys_log_vprintf
+# have nearly identical code, here we require that they stay in sync.
+check_logsys_log_printf_functions:
+       $(AWK) '/^void _logsys_log_printf \(/, /^}/' $(srcdir)/logsys.c \
+         | sed '/^[     ]*va_/d;s/\.\.\.)$$/va_list ap)/' > $...@-1
+       $(AWK) '/^void _logsys_log_vprintf \(/, /^}/' $(srcdir)/logsys.c \
+         | sed 's/log_vprintf/log_printf/' > $...@-2
+       diff $...@-1 $...@-2 && rm -f $...@-1 $...@-2
+
+check: check_logsys_log_printf_functions
--
1.6.3.rc1.205.g37f8
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to