Andy Howell wrote:
> I have some code that uses the pre-processor to generate code to log messages:
>
> #define logDebug if ( Log::minLevel <= Log::LVL_DEBUG ) Log::printLog
>
> Helgrind reports data races ultimately due to the global Log::minLevel. While
> technically
> this is a potential race condition, Log::minLevel is essentially a constant
> after startup.
>
> I tried to add suppressions for the mangled Log::printLog method, however
> because of the
> #define, helgrind reports the race on lines where LogDebug is used, not the
> Log::printLog
> method.
>
> Is there any way to add a suppression based on the global variable?
>
> Thanks,
>
> Andy
>
Andy,
not an ideal solution, but could you do something like this
static boolean logRequired(void)
{
return (Log::minLevel <= Log::LVL_DEBUG);
}
#define logDebug if ( logRequired() ) Log::printLog
and then suppress the warning for logRequired()
Of course, you need to disable auto-inlining for logRequired()
HTH,
Colin S. Miller
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables
unlimited royalty-free distribution of the report engine
for externally facing server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Valgrind-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-users