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

Issue 701532 link

Starred by 4 users

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 3
Type: Bug
Hotlist-MemoryInfra



Sign in to add a comment

Startup tracing on Linux DCHECKs

Project Member Reported by dskiba@chromium.org, Mar 14 2017

Issue description

Startup tracing on Linux fails at the last stages of tracing with:

[100429:100458:0314/140512.042275:FATAL:timer.cc(194)] Check failed: thread_id_ == 0 || thread_id_ == static_cast<int>(PlatformThread::CurrentId()). 
#0 0x7f7b307eea97 base::debug::StackTrace::StackTrace()
#1 0x7f7b3080872b logging::LogMessage::~LogMessage()
#2 0x7f7b30867055 base::Timer::~Timer()
#3 0x7f7b3086f1ac base::trace_event::MemoryDumpScheduler::~MemoryDumpScheduler()
#4 0x7f7b3086d6b8 base::trace_event::MemoryDumpManager::OnTraceLogDisabled()
#5 0x7f7b3087f7aa base::trace_event::TraceLog::SetDisabledWhileLocked()
#6 0x7f7b3087f4ad base::trace_event::TraceLog::SetDisabled()
#7 0x7f7b2f4bb179 content::TracingControllerImpl::SetDisabledOnFileThread()
#8 0x7f7b3089e4b9 base::debug::TaskAnnotator::RunTask()
#9 0x7f7b3080fa7d base::MessageLoop::RunTask()
#10 0x7f7b30810126 base::MessageLoop::DoWork()
#11 0x7f7b30813039 base::MessagePumpLibevent::Run()
#12 0x7f7b3080f7ce base::MessageLoop::RunHandler()
#13 0x7f7b30836bbc base::RunLoop::Run()
#14 0x7f7b308616fc base::Thread::Run()
#15 0x7f7b2f0c16a5 content::BrowserThreadImpl::FileThreadRun()
#16 0x7f7b2f0c1a9c content::BrowserThreadImpl::Run()
#17 0x7f7b30861c18 base::Thread::ThreadMain()
#18 0x7f7b3085ab9c base::(anonymous namespace)::ThreadFunc()
#19 0x7f7b2dbb3184 start_thread
#20 0x7f7b2762437d clone

I've built with dcheck_always_on = true.

trace.config:
{
  "startup_duration": 50,
  "result_file": "/usr/local/google/code/clankium/src/trace.json",
  "trace_config": {
    "included_categories": ["disabled-by-default-memory-infra"],
    "excluded_categories": ["*"],
    "memory_dump_config": {
      "heap_profiler_options": {
        "breakdown_threshold_bytes": 1024
      },
      "triggers": [
        {"mode":"detailed", "periodic_interval_ms": 40000}
      ]
    }
  }
}

 

Comment 1 by ssid@chromium.org, Mar 15 2017

I think this issue has always been there with startup tracing.
The startup tracing enables TraceLog on one thread and disables on another thread. Normally it is done on file thread, but startup tracing enables tracing before the threads are created to capture more events.

I think we should move the periodic timer to the dump_thread.
Summary: MemoryDumpManager DCHECKs (was: Startup tracing on Linux DCHECKs)
It looks like this is not only for startup tracing. I get this for normal trace recording, too, on tot.

- go to about://tracing and hit record.
- select memory-infra and hit record.
- open some tabs and wait until the buffer is full or almost full (do not stop recording).
- chrome crashes with the following:

[11098:11098:0316/132502.228493:FATAL:thread_restrictions.cc(38)] Check failed: false. Function marked as IO-only was called from a thread that disallows IO!  If this thread really should be allowed to make IO calls, adjust the call to base::ThreadRestrictions::SetIOAllowed() in this thread's startup.
#0 0x7f9da00e8af7 base::debug::StackTrace::StackTrace()
#1 0x7f9da010ce1b logging::LogMessage::~LogMessage()
#2 0x7f9da018f645 base::ThreadRestrictions::AssertIOAllowed()
#3 0x7f9da0183eba base::PlatformThread::Join()
#4 0x7f9da018b690 base::Thread::Stop()
#5 0x7f9da01a059b base::trace_event::MemoryDumpManager::OnTraceLogDisabled()
#6 0x7f9da01ba5fa base::trace_event::TraceLog::SetDisabledWhileLocked()
#7 0x7f9da01b6dba base::trace_event::TraceLog::ThreadLocalEventBuffer::AddTraceEvent()
#8 0x7f9da01bcb67 base::trace_event::TraceLog::AddTraceEventWithThreadIdAndTimestamp()
#9 0x7f9da00e970a base::debug::TaskAnnotator::RunTask()
#10 0x7f9da011a2dd base::MessageLoop::RunTask()
#11 0x7f9da011ab4e base::MessageLoop::DoDelayedWork()
#12 0x7f9da011cc10 base::(anonymous namespace)::WorkSourceDispatch()
#13 0x7f9d9910ce04 g_main_context_dispatch
#14 0x7f9d9910d048 <unknown>
#15 0x7f9d9910d0ec g_main_context_iteration
#16 0x7f9da011c946 base::MessagePumpGlib::Run()
#17 0x7f9da011a02e base::MessageLoop::RunHandler()
#18 0x7f9da014e91c base::RunLoop::Run()
#19 0x7f9da13385fa ChromeBrowserMainParts::MainMessageLoopRun()
#20 0x7f9d9d7f5989 content::BrowserMainLoop::RunMainMessageLoopParts()
#21 0x7f9d9d7f9917 content::BrowserMainRunnerImpl::Run()
#22 0x7f9d9d7f0b4e content::BrowserMain()
#23 0x7f9d9e01ad83 content::RunNamedProcessTypeMain()
#24 0x7f9d9e01ba96 content::ContentMainRunnerImpl::Run()
#25 0x7f9d9e01a120 content::ContentMain()
#26 0x7f9da0c1a291 ChromeMain
#27 0x7f9d96707f45 __libc_start_main
#28 0x7f9da0c1a129 <unknown>


Cc: chiniforooshan@chromium.org

Comment 4 by ssid@chromium.org, Mar 16 2017

Wait these 2 are different issues. The first issue is because the timer is not stopped in right thread. The second issue is Thread::Stop is not allowed on any thread, but only file thread. Can you file a different bug for this? I am scared it'll get missed after fixing one of these issues.
Summary: Startup tracing on Linux DCHECKs (was: MemoryDumpManager DCHECKs)
Oh, sorry. Filed 702289.
Status: Assigned (was: Untriaged)

Sign in to add a comment