| Index: runtime/vm/thread_registry.cc
|
| diff --git a/runtime/vm/thread_registry.cc b/runtime/vm/thread_registry.cc
|
| index 8ade009c6035e6762ee9f45b39b1ce2dcc00100c..885219a80802bdd0e9011cc00e25039719c91214 100644
|
| --- a/runtime/vm/thread_registry.cc
|
| +++ b/runtime/vm/thread_registry.cc
|
| @@ -9,6 +9,29 @@
|
|
|
| namespace dart {
|
|
|
| +ThreadRegistry::~ThreadRegistry() {
|
| + {
|
| + // Each thread that is scheduled in this isolate may have a cached timeline
|
| + // block. Mark these timeline blocks as finished.
|
| + MonitorLocker ml(monitor_);
|
| + TimelineEventRecorder* recorder = Timeline::recorder();
|
| + if (recorder != NULL) {
|
| + MutexLocker recorder_lock(&recorder->lock_);
|
| + for (intptr_t i = 0; i < entries_.length(); i++) {
|
| + // NOTE: It is only safe to access |entry.state| here.
|
| + const Entry& entry = entries_.At(i);
|
| + if (entry.state.timeline_block != NULL) {
|
| + entry.state.timeline_block->Finish();
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + // Delete monitor.
|
| + delete monitor_;
|
| +}
|
| +
|
| +
|
| void ThreadRegistry::SafepointThreads() {
|
| MonitorLocker ml(monitor_);
|
| // First wait for any older rounds that are still in progress.
|
|
|