Colin Miller wrote:
> 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()
> 

Colin,

        Thanks, that did the trick. I tried various combinations declaring 
minLevel as a const 
and evilly circumventing the 'const-ness'. Good for generating core dumps, but 
not much else.

Regards,

        Andy


------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com 
_______________________________________________
Valgrind-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to