Steven Dake wrote:
> I dunno what that does, but if it works, then i'm satisified :)

;-)
committed

The new rule extracts the body of _logsys_log_printf, then removes the
va_ statements and changes the "..." to "va_lsit ap" in the param list.
Saves that in a file named $...@-1.
Then it extracts _logsys_log_vprintf into $...@-2.
Finally it compares those two files.
If they're equal it removes them.  Otherwise, "make check" fails.

> On Thu, 2009-04-23 at 13:32 +0200, Jim Meyering wrote:
>> 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