-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
glog: release 0.3.4 #1
Conversation
migrate to https://github.com/google/glog use autoconf 2.69 / automake 1.14.1
Checking in the automatically generated files? |
yeah, it used to check in files generated by autoconf etc. anyway, I don't object to auto generated file removal. |
If you're used to doing that, I'd say no rush. I could send you a pull request later on to remove them, and possibly add the traditional |
ok |
Summary: Issue google#80 points out several places in glog where TSAN discovers false positives. One of these places is in the `LOG_EVERY_N` macros. These macros are implemented by maintaining a static unprotected integer counter, and TSAN will report data races on these counters. Here is a minimum example to reproduce the data race: ``` void logging() { for (int i = 0; i < 300; ++i) { LOG_EVERY_N(INFO, 2) << "foo"; } } int main() { auto t1 = std::thread(logging); auto t2 = std::thread(logging); t1.join(); t2.join(); return 0; } ``` And here is the TSAN report: ``` WARNING: ThreadSanitizer: data race (pid=776850) Write of size 4 at 0x558de483f684 by thread T2: #0 logging() google#1 void std::_Bind_simple<void (*())()>::_M_invoke<>(std::_Index_tuple<>) google#2 std::_Bind_simple<void (*())()>::operator()() google#3 std::thread::_Impl<std::_Bind_simple<void (*())()> >::_M_run() google#4 execute_native_thread_routine Previous write of size 4 at 0x558de483f684 by thread T1: #0 logging() google#1 void std::_Bind_simple<void (*())()>::_M_invoke<>(std::_Index_tuple<>) google#2 std::_Bind_simple<void (*())()>::operator()() google#3 std::thread::_Impl<std::_Bind_simple<void (*())()> >::_M_run() google#4 execute_native_thread_routine Location is global '<null>' at 0x000000000000 (main+0x00000011c684) Thread T2 (tid=776857, running) created by main thread at: #0 pthread_create google#1 __gthread_create google#2 std::thread::_M_start_thread(std::shared_ptr<std::thread::_Impl_base>, void (*)()) google#3 main Thread T1 (tid=776856, running) created by main thread at: #0 pthread_create google#1 __gthread_create google#2 std::thread::_M_start_thread(std::shared_ptr<std::thread::_Impl_base>, void (*)()) google#3 main SUMMARY: ThreadSanitizer: data race in logging() ``` To avoid noisy TSAN reports and also avoid adding a performance hit, this change will mark these counters as benign races so that TSAN will not report them. This change will only have an effect if we are compiling with TSAN; there are no changes if we are not building with TSAN. With this change, the above example no longer reports a data race when built and run with TSAN.
glog: release 0.3.4
migrate to https://github.com/google/glog
use autoconf 2.69 / automake 1.14.1