Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(381)

Unified Diff: src/hydrogen-environment-liveness.cc

Issue 212603013: Fix TSAN issue wrt assertions in the optimizing compiler thread. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/handles-inl.h ('K') | « src/handles-inl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/hydrogen-environment-liveness.cc
diff --git a/src/hydrogen-environment-liveness.cc b/src/hydrogen-environment-liveness.cc
index d7501ac49e6fd2b519a1471a1f6d88543410d16d..d37731f12d9379c52a5b739cf682a9ad8b434d38 100644
--- a/src/hydrogen-environment-liveness.cc
+++ b/src/hydrogen-environment-liveness.cc
@@ -84,8 +84,10 @@ void HEnvironmentLivenessAnalysisPhase::ZapEnvironmentSlotsInSuccessors(
}
HSimulate* simulate = first_simulate_.at(successor_id);
if (simulate == NULL) continue;
- ASSERT(simulate->closure().is_identical_to(
- block->last_environment()->closure()));
+ { AllowHandleDereference locked;
+ ASSERT(simulate->closure().is_identical_to(
+ block->last_environment()->closure()));
+ }
ZapEnvironmentSlot(i, simulate);
}
}
@@ -97,7 +99,9 @@ void HEnvironmentLivenessAnalysisPhase::ZapEnvironmentSlotsForInstruction(
if (!marker->CheckFlag(HValue::kEndsLiveRange)) return;
HSimulate* simulate = marker->next_simulate();
if (simulate != NULL) {
- ASSERT(simulate->closure().is_identical_to(marker->closure()));
+ { AllowHandleDereference locked;
+ ASSERT(simulate->closure().is_identical_to(marker->closure()));
+ }
ZapEnvironmentSlot(marker->index(), simulate);
}
}
@@ -227,11 +231,18 @@ void HEnvironmentLivenessAnalysisPhase::Run() {
// Analysis finished. Zap dead environment slots.
for (int i = 0; i < markers_.length(); ++i) {
+ // Acquire relocation lock to dereference for assertion.
+#ifdef DEBUG
+ Heap::RelocationLock for_heap_access(isolate()->heap());
Hannes Payer (out of office) 2014/03/27 17:16:20 what about moving that locking code to where it is
Yang 2014/03/28 08:27:40 I refactored the handle comparison.
+#endif
ZapEnvironmentSlotsForInstruction(markers_[i]);
}
for (int block_id = block_count_ - 1; block_id >= 0; --block_id) {
HBasicBlock* block = graph()->blocks()->at(block_id);
UpdateLivenessAtBlockEnd(block, &live);
+#ifdef DEBUG
+ Heap::RelocationLock for_heap_access(isolate()->heap());
Hannes Payer (out of office) 2014/03/27 17:16:20 what about moving that locking code to where it is
+#endif
ZapEnvironmentSlotsInSuccessors(block, &live);
}
« src/handles-inl.h ('K') | « src/handles-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698