Nathan Sidwell <nat...@acm.org> writes: > On 05/19/16 14:40, Aaron Conole wrote: >> Nathan Sidwell <nat...@acm.org> writes: > >>>> +FILE *__gcov_error_file = NULL; >>> >>> Unless I'm missing something, isn't this only accessed from this file? >>> (So could be static with a non-underbarred name) >> >> Ack. > > I have a vague memory that perhaps the __gcov_error_file is seen from > other dynamic objects, and one of them gets to open/close it? I think > the closing function needs to reset it to NULL though? (In case it's > reactivated before the process exits)
This is being introduced here, so the actual variable won't be seen, however you're correct - the APIs could still be called. I think there does exist a possibility that it can get re-activated before the process exits. So, I've changed it to have a proper block cope and to reset gcov_error_file to NULL. >>> And this protection here, makes me wonder what happens if one is >>> IN_GCOV_TOOL. Does it pay attention to GCOV_ERROR_FILE? That would >>> seem incorrect, and thus the above should be changed so that stderr is >>> unconditionally used when IN_GCOV_TOOL? >> >> You are correct. I will fix it. > > thanks. > >>>> +static void >>>> +gcov_error_exit(void) >>>> +{ >>>> + if (__gcov_error_file && __gcov_error_file != stderr) >>>> + { >>> >>> Braces are not needed here. > > Unless of course my speculation about setting it to NULL is right. It is - I've fixed it, and will post the v3 patch shortly. Thank you for your help, Nathan! > nathan