Changeset 202955 in webkit
- Timestamp:
- Jul 7, 2016, 8:47:59 PM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 1 added
- 2 edited
-
ChangeLog (modified) (1 diff)
-
dfg/DFGStoreBarrierInsertionPhase.cpp (modified) (1 diff)
-
tests/stress/regress-159537.js (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r202954 r202955 1 2016-07-07 Michael Saboff <msaboff@apple.com> 2 3 REGRESSION(184445): Need to insert a StoreBarrier when we don't know child's epoch 4 https://bugs.webkit.org/show_bug.cgi?id=159537 5 6 Reviewed by Benjamin Poulain. 7 8 We weren't checking the case of a child node with a null epoch. The problem surfaces 9 when the base node of a PutByVal variant has a non-null epoch, because it represents an 10 allocation in the current function, while the child of the same node has an unknown epoch. 11 Added a check that the child node is not null before comparing the epochs of the base and 12 child nodes. 13 14 The added test creates the problem circumstance by doing a full GC to place an array in 15 remembered space, allocating a new object followed by an eden GC. The new object is 16 only referenced by the array and therefore won't be visited Without the store barrier. 17 The test may crash or more likely get the wrong answer with the bug. 18 19 * dfg/DFGStoreBarrierInsertionPhase.cpp: 20 * tests/stress/regress-159537.js: Added test. 21 (MyNumber): 22 (MyNumber.prototype.plusOne): 23 (bar): 24 (foo): 25 (test): 26 1 27 2016-07-07 Joseph Pecoraro <pecoraro@apple.com> 2 28 -
trunk/Source/JavaScriptCore/dfg/DFGStoreBarrierInsertionPhase.cpp
r199300 r202955 460 460 // allocated before we did any epoch tracking. Two objects being in the null epoch 461 461 // means that we don't know their epoch relationship. 462 if (!!base->epoch() && base->epoch() >= child->epoch()) {462 if (!!base->epoch() && !!child->epoch() && base->epoch() >= child->epoch()) { 463 463 if (verbose) 464 464 dataLog(" Rejecting because of epoch ordering.\n"); 465 465 return; 466 466 } 467 467 468 468 considerBarrier(base); 469 469 }
Note:
See TracChangeset
for help on using the changeset viewer.