New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 756595 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Nov 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows
Pri: 2
Type: Bug

Blocking:
issue 513534



Sign in to add a comment

histogram.cc(200) Check failed: !allocator when simultaneously launching multiple instances of browser.

Project Member Reported by mattm@chromium.org, Aug 17 2017

Issue description

I'm working on re-enabling the browser_test ProcessSingletonTest.StartupRaceCondition, which tests starting multiple instances of the browser at the same time.

I have the test working, but it frequently triggers a CHECK in histogram.cc. I have uploaded the wip CL here: https://chromium-review.googlesource.com/c/619659


[32754:32754:0817/133118.136381:ERROR:persistent_memory_allocator.cc(815)] Corruption detected in shared-memory segment.
[32754:32754:0817/133118.186841:FATAL:histogram.cc(200)] Check failed: !allocator.
#0 0x7fc06ceec1dd base::debug::StackTrace::StackTrace()
#1 0x7fc06ceea5ac base::debug::StackTrace::StackTrace()
#2 0x7fc06cf7aa4a logging::LogMessage::~LogMessage()
#3 0x7fc06cfd7f58 base::Histogram::Factory::Build()
#4 0x7fc06cfdef54 base::LinearHistogram::FactoryGetWithRangeDescription()
#5 0x7fc06cfdedf4 base::LinearHistogram::FactoryGet()
#6 0x7fc06cfdf08b base::LinearHistogram::FactoryGet()
#7 0x7fc06cff1cf5 base::PersistentHistogramAllocator::GetCreateHistogramResultHistogram()
#8 0x7fc06cfedcc0 base::PersistentHistogramAllocator::RecordCreateHistogramResult()
#9 0x7fc06cff0067 base::PersistentHistogramAllocator::AllocateHistogram()
#10 0x7fc06cfd7b39 base::Histogram::Factory::Build()
#11 0x7fc06cfdef54 base::LinearHistogram::FactoryGetWithRangeDescription()
#12 0x7fc06cfdedf4 base::LinearHistogram::FactoryGet()
#13 0x7fc06cfdf08b base::LinearHistogram::FactoryGet()
#14 0x000004741a4d (anonymous namespace)::InstantiatePersistentHistograms()
#15 0x000004741081 ChromeBrowserFieldTrials::InstantiateDynamicTrials()
#16 0x000004741065 ChromeBrowserFieldTrials::SetupFieldTrials()
#17 0x0000059ff491 variations::VariationsFieldTrialCreator::SetupFieldTrials()
#18 0x0000059f6f36 variations::VariationsService::SetupFieldTrials()
#19 0x0000046855bd ChromeBrowserMainParts::SetupFieldTrials()
#20 0x00000468987a ChromeBrowserMainParts::PreCreateThreadsImpl()
#21 0x0000046875c5 ChromeBrowserMainParts::PreCreateThreads()
#22 0x7fc064648396 content::BrowserMainLoop::PreCreateThreads()
#23 0x7fc06362a5fd _ZN4base8internal13FunctorTraitsIMN7content14NetworkContextEFvvEvE6InvokeIPS3_JEEEvS5_OT_DpOT0_
#24 0x7fc06362a544 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKMN7content14NetworkContextEFvvEJPS5_EEEvOT_DpOT0_
#25 0x7fc064654315 _ZN4base8internal7InvokerINS0_9BindStateIMN7content15BrowserMainLoopEFivEJNS0_17UnretainedWrapperIS4_EEEEEFivEE7RunImplIRKS6_RKNSt3__15tupleIJS8_EEEJLm0EEEEiOT_OT0_NS_13IndexSequenceIJXspT1_EEEE
#26 0x7fc06465425c _ZN4base8internal7InvokerINS0_9BindStateIMN7content15BrowserMainLoopEFivEJNS0_17UnretainedWrapperIS4_EEEEEFivEE3RunEPNS0_13BindStateBaseE
#27 0x7fc06360522d _ZNKR4base8CallbackIFvvELNS_8internal8CopyModeE1ELNS2_10RepeatModeE1EE3RunEv
#28 0x7fc06540d05d content::StartupTaskRunner::RunAllTasksNow()
#29 0x7fc0646497df content::BrowserMainLoop::CreateStartupTasks()
#30 0x7fc0646567b4 content::BrowserMainRunnerImpl::Initialize()
#31 0x7fc064641e14 content::BrowserMain()
#32 0x7fc0662716e4 content::RunNamedProcessTypeMain()
#33 0x7fc0662742de content::ContentMainRunnerImpl::Run()
#34 0x7fc06626f19d content::ContentServiceManagerMainDelegate::RunEmbedderProcess()
#35 0x7fc061326075 service_manager::Main()
#36 0x7fc06627055f content::ContentMain()
#37 0x000004b920f1 content::LaunchTests()
#38 0x0000038e723b LaunchChromeTests()
#39 0x0000038e637b main
#40 0x7fc053a3ef45 __libc_start_main
#41 0x00000079a6d4 <unknown>

 
Are the multiple browsers using the same user data dir or different ones? I assume it should be different since same is not something that's supported unless you're testing rendezvous functionality - but if it's different I'm surprised they'd conflict with each other's persistent histograms.

Comment 2 by mattm@chromium.org, Aug 17 2017

The same user-data-dir.

The test is to verify that ProcessSingleton only allows one browser to actually start, and the others should just cause additional windows to be opened in the one that wins.  If there is a crash, it possibly means something is accessing user-data-dir before the ProcessSingleton check occurs, which is a no-no.
Hmmm...  Metrics recording starts very early and we've always hoped to enable persistence as close to main() as possible, but it manages a memory-mapped file in that directory.

Comment 4 by mattm@chromium.org, Aug 17 2017

Labels: OS-Windows
Verified that it occurs on windows too:

[16336:7544:0817/155219.373:FATAL:histogram.cc(206)] Check failed: !allocator. 
Backtrace:
	base::debug::StackTrace::StackTrace [0x00000001800E5178+104] (D:\src\chrome\src\base\debug\stack_trace_win.cc:217)
	base::debug::StackTrace::StackTrace [0x00000001800E448F+31] (D:\src\chrome\src\base\debug\stack_trace.cc:199)
	logging::LogMessage::~LogMessage [0x0000000180161E53+131] (D:\src\chrome\src\base\logging.cc:553)
	base::Histogram::Factory::Build [0x0000000180205D30+1264] (D:\src\chrome\src\base\metrics\histogram.cc:207)
	base::LinearHistogram::FactoryGetWithRangeDescription [0x000000018020C2AE+398] (D:\src\chrome\src\base\metrics\histogram.cc:955)
	base::LinearHistogram::FactoryGet [0x000000018020C0F7+103] (D:\src\chrome\src\base\metrics\histogram.cc:900)
	base::LinearHistogram::FactoryGet [0x000000018020C480+160] (D:\src\chrome\src\base\metrics\histogram.cc:919)
	base::PersistentHistogramAllocator::GetCreateHistogramResultHistogram [0x000000018023035E+414] (D:\src\chrome\src\base\metrics\persistent_histogram_allocator.cc:566)
	base::PersistentHistogramAllocator::RecordCreateHistogramResult [0x000000018022CE0D+13] (D:\src\chrome\src\base\metrics\persistent_histogram_allocator.cc:752)
	base::PersistentHistogramAllocator::AllocateHistogram [0x000000018022E3D0+208] (D:\src\chrome\src\base\metrics\persistent_histogram_allocator.cc:323)
	base::Histogram::Factory::Build [0x0000000180205B93+851] (D:\src\chrome\src\base\metrics\histogram.cc:192)
	base::LinearHistogram::FactoryGetWithRangeDescription [0x000000018020C2AE+398] (D:\src\chrome\src\base\metrics\histogram.cc:955)
	base::LinearHistogram::FactoryGet [0x000000018020C0F7+103] (D:\src\chrome\src\base\metrics\histogram.cc:900)
	base::LinearHistogram::FactoryGet [0x000000018020C480+160] (D:\src\chrome\src\base\metrics\histogram.cc:919)
	`anonymous namespace'::InstantiatePersistentHistograms [0x0000000145B5E990+1536] (D:\src\chrome\src\chrome\browser\chrome_browser_field_trials.cc:178)
	ChromeBrowserFieldTrials::InstantiateDynamicTrials [0x0000000145B5E2DE+14] (D:\src\chrome\src\chrome\browser\chrome_browser_field_trials.cc:240)
	ChromeBrowserFieldTrials::SetupFieldTrials [0x0000000145B5E2B3+19] (D:\src\chrome\src\chrome\browser\chrome_browser_field_trials.cc:227)
	variations::VariationsFieldTrialCreator::SetupFieldTrials [0x000000014673F653+1939] (D:\src\chrome\src\components\variations\service\variations_field_trial_creator.cc:410)
	variations::VariationsService::SetupFieldTrials [0x00000001467322A2+354] (D:\src\chrome\src\components\variations\service\variations_service.cc:735)
	ChromeBrowserMainParts::SetupFieldTrials [0x0000000145B16758+760] (D:\src\chrome\src\chrome\browser\chrome_browser_main.cc:696)
	ChromeBrowserMainParts::PreCreateThreadsImpl [0x0000000145B19C48+4744] (D:\src\chrome\src\chrome\browser\chrome_browser_main.cc:1183)
	ChromeBrowserMainParts::PreCreateThreads [0x0000000145B185E5+309] (D:\src\chrome\src\chrome\browser\chrome_browser_main.cc:897)
	ChromeBrowserMainPartsWin::PreCreateThreads [0x0000000145A0DBB1+481] (D:\src\chrome\src\chrome\browser\chrome_browser_main_win.cc:363)
	content::BrowserMainLoop::PreCreateThreads [0x000000000A410EC0+368] (D:\src\chrome\src\content\browser\browser_main_loop.cc:808)
	base::internal::FunctorTraits<int (content::BrowserMainLoop::*)(),void>::Invoke<content::BrowserMainLoop *> [0x000000000A420DFA+26] (D:\src\chrome\src\base\bind_internal.h:194)
	base::internal::InvokeHelper<0,int>::MakeItSo<int (content::BrowserMainLoop::*const &)(),content::BrowserMainLoop *> [0x000000000A420D64+52] (D:\src\chrome\src\base\bind_internal.h:263)
	base::internal::Invoker<base::internal::BindState<int (content::BrowserMainLoop::*)(),base::internal::UnretainedWrapper<content::BrowserMainLoop> >,int ()>::RunImpl<int (content::BrowserMainLoop::*const &)(),const std::tuple<base::internal::UnretainedWrap [0x000000000A420CF7+87] (D:\src\chrome\src\base\bind_internal.h:335)
	base::internal::Invoker<base::internal::BindState<int (content::BrowserMainLoop::*)(),base::internal::UnretainedWrapper<content::BrowserMainLoop> >,int ()>::Run [0x000000000A420B9D+61] (D:\src\chrome\src\base\bind_internal.h:317)
	base::Callback<int (),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating>::Run [0x000000000BA661A2+66] (D:\src\chrome\src\base\callback.h:80)
	content::StartupTaskRunner::RunAllTasksNow [0x000000000BAD68BE+158] (D:\src\chrome\src\content\browser\startup_task_runner.cc:45)
	content::BrowserMainLoop::CreateStartupTasks [0x000000000A411BCA+986] (D:\src\chrome\src\content\browser\browser_main_loop.cc:940)
	content::BrowserMainRunnerImpl::Initialize [0x000000000A42769A+1578] (D:\src\chrome\src\content\browser\browser_main_runner.cc:132)
	content::BrowserMain [0x000000000A40A634+148] (D:\src\chrome\src\content\browser\browser_main.cc:42)
	content::RunNamedProcessTypeMain [0x000000000D4F173C+220] (D:\src\chrome\src\content\app\content_main_runner.cc:410)
	content::ContentMainRunnerImpl::Run [0x000000000D4F26B8+664] (D:\src\chrome\src\content\app\content_main_runner.cc:693)
	content::ContentServiceManagerMainDelegate::RunEmbedderProcess [0x000000000D4F07CA+42] (D:\src\chrome\src\content\app\content_service_manager_main_delegate.cc:51)
	service_manager::Main [0x000000001260BCBD+1341] (D:\src\chrome\src\services\service_manager\embedder\main.cc:469)
	content::ContentMain [0x000000000D4F15A2+82] (D:\src\chrome\src\content\app\content_main.cc:19)
	content::LaunchTests [0x00000001451D57E0+816] (D:\src\chrome\src\content\public\test\test_launcher.cc:526)
	LaunchChromeTests [0x000000014B7157E3+147] (D:\src\chrome\src\chrome\test\base\chrome_test_launcher.cc:149)
	main [0x000000014B714E85+197] (D:\src\chrome\src\chrome\test\base\browser_tests_main.cc:21)
	invoke_main [0x000000014CB0CA24+52] (f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:65)
	__scrt_common_main_seh [0x000000014CB0C8E7+295] (f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:253)
	__scrt_common_main [0x000000014CB0C7AE+14] (f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:296)
	mainCRTStartup [0x000000014CB0CA49+9] (f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp:17)
	BaseThreadInitThunk [0x00007FFAF9B88102+34]
	RtlUserThreadStart [0x00007FFAFC2AC5B4+52]



Also a different error happens sometimes:

[11156:10044:0817/155017.349:FATAL:persistent_histogram_allocator.cc(802)] Check failed: false. C:\Users\mattm\AppData\Local\Temp\scoped_dir16900_4957\BrowserMetrics-active.pma
Backtrace:
	base::debug::StackTrace::StackTrace [0x00000001800E5178+104] (D:\src\chrome\src\base\debug\stack_trace_win.cc:217)
	base::debug::StackTrace::StackTrace [0x00000001800E448F+31] (D:\src\chrome\src\base\debug\stack_trace.cc:199)
	logging::LogMessage::~LogMessage [0x0000000180161E53+131] (D:\src\chrome\src\base\logging.cc:553)
	base::GlobalHistogramAllocator::CreateWithFile [0x00000001802314BC+636] (D:\src\chrome\src\base\metrics\persistent_histogram_allocator.cc:803)
	`anonymous namespace'::InstantiatePersistentHistograms [0x0000000145B5E7BB+1067] (D:\src\chrome\src\chrome\browser\chrome_browser_field_trials.cc:148)
	ChromeBrowserFieldTrials::InstantiateDynamicTrials [0x0000000145B5E2DE+14] (D:\src\chrome\src\chrome\browser\chrome_browser_field_trials.cc:240)
	ChromeBrowserFieldTrials::SetupFieldTrials [0x0000000145B5E2B3+19] (D:\src\chrome\src\chrome\browser\chrome_browser_field_trials.cc:227)
	variations::VariationsFieldTrialCreator::SetupFieldTrials [0x000000014673F653+1939] (D:\src\chrome\src\components\variations\service\variations_field_trial_creator.cc:410)
	variations::VariationsService::SetupFieldTrials [0x00000001467322A2+354] (D:\src\chrome\src\components\variations\service\variations_service.cc:735)
	ChromeBrowserMainParts::SetupFieldTrials [0x0000000145B16758+760] (D:\src\chrome\src\chrome\browser\chrome_browser_main.cc:696)
	ChromeBrowserMainParts::PreCreateThreadsImpl [0x0000000145B19C48+4744] (D:\src\chrome\src\chrome\browser\chrome_browser_main.cc:1183)
	ChromeBrowserMainParts::PreCreateThreads [0x0000000145B185E5+309] (D:\src\chrome\src\chrome\browser\chrome_browser_main.cc:897)
	ChromeBrowserMainPartsWin::PreCreateThreads [0x0000000145A0DBB1+481] (D:\src\chrome\src\chrome\browser\chrome_browser_main_win.cc:363)
	content::BrowserMainLoop::PreCreateThreads [0x000000000A400EC0+368] (D:\src\chrome\src\content\browser\browser_main_loop.cc:808)
	base::internal::FunctorTraits<int (content::BrowserMainLoop::*)(),void>::Invoke<content::BrowserMainLoop *> [0x000000000A410DFA+26] (D:\src\chrome\src\base\bind_internal.h:194)
	base::internal::InvokeHelper<0,int>::MakeItSo<int (content::BrowserMainLoop::*const &)(),content::BrowserMainLoop *> [0x000000000A410D64+52] (D:\src\chrome\src\base\bind_internal.h:263)
	base::internal::Invoker<base::internal::BindState<int (content::BrowserMainLoop::*)(),base::internal::UnretainedWrapper<content::BrowserMainLoop> >,int ()>::RunImpl<int (content::BrowserMainLoop::*const &)(),const std::tuple<base::internal::UnretainedWrap [0x000000000A410CF7+87] (D:\src\chrome\src\base\bind_internal.h:335)
	base::internal::Invoker<base::internal::BindState<int (content::BrowserMainLoop::*)(),base::internal::UnretainedWrapper<content::BrowserMainLoop> >,int ()>::Run [0x000000000A410B9D+61] (D:\src\chrome\src\base\bind_internal.h:317)
	base::Callback<int (),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating>::Run [0x000000000BA561A2+66] (D:\src\chrome\src\base\callback.h:80)
	content::StartupTaskRunner::RunAllTasksNow [0x000000000BAC68BE+158] (D:\src\chrome\src\content\browser\startup_task_runner.cc:45)
	content::BrowserMainLoop::CreateStartupTasks [0x000000000A401BCA+986] (D:\src\chrome\src\content\browser\browser_main_loop.cc:940)
	content::BrowserMainRunnerImpl::Initialize [0x000000000A41769A+1578] (D:\src\chrome\src\content\browser\browser_main_runner.cc:132)
	content::BrowserMain [0x000000000A3FA634+148] (D:\src\chrome\src\content\browser\browser_main.cc:42)
	content::RunNamedProcessTypeMain [0x000000000D4E173C+220] (D:\src\chrome\src\content\app\content_main_runner.cc:410)
	content::ContentMainRunnerImpl::Run [0x000000000D4E26B8+664] (D:\src\chrome\src\content\app\content_main_runner.cc:693)
	content::ContentServiceManagerMainDelegate::RunEmbedderProcess [0x000000000D4E07CA+42] (D:\src\chrome\src\content\app\content_service_manager_main_delegate.cc:51)
	service_manager::Main [0x00000000125FBCBD+1341] (D:\src\chrome\src\services\service_manager\embedder\main.cc:469)
	content::ContentMain [0x000000000D4E15A2+82] (D:\src\chrome\src\content\app\content_main.cc:19)
	content::LaunchTests [0x00000001451D57E0+816] (D:\src\chrome\src\content\public\test\test_launcher.cc:526)
	LaunchChromeTests [0x000000014B7157E3+147] (D:\src\chrome\src\chrome\test\base\chrome_test_launcher.cc:149)
	main [0x000000014B714E85+197] (D:\src\chrome\src\chrome\test\base\browser_tests_main.cc:21)
	invoke_main [0x000000014CB0CA24+52] (f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:65)
	__scrt_common_main_seh [0x000000014CB0C8E7+295] (f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:253)
	__scrt_common_main [0x000000014CB0C7AE+14] (f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:296)
	mainCRTStartup [0x000000014CB0CA49+9] (f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp:17)
	BaseThreadInitThunk [0x00007FFAF9B88102+34]
	RtlUserThreadStart [0x00007FFAFC2AC5B4+52]



Comment 5 by mattm@chromium.org, Aug 17 2017

Blocking: 513534

Comment 6 by mattm@chromium.org, Aug 22 2017

So, any more thoughts about this? If it's assuming it has exclusive access to that file, things will probably not be happy.

And not just with obscure startup races. I just did a simple test:
1. run ./out/default/chrome, wait for browser to fully start up.
2. observe that .config/chromium/BrowserMetrics-active.pma exists
3. in another terminal, run ./out/default/chrome www.google.com
4. observe that a new www.google.com tab has opened in the existing browser
5. observe that .config/chromium/BrowserMetrics-active.pma has been deleted

That's probably not what's supposed to happen?
Labels: -Pri-1 Pri-2
Owner: bcwh...@chromium.org
Status: Assigned (was: Untriaged)
Status: Fixed (was: Assigned)
I believe this is fixed with CL/699796.
https://chromium-review.googlesource.com/699796

General rendezvous problems are tracked in issue 696721.

Sign in to add a comment