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

Reply via email to