Bug 200151

Summary: [JSC] Potential GC fix for JSPropertyNameEnumerator
Product: WebKit Reporter: Yusuke Suzuki <ysuzuki>
Component: New BugsAssignee: Yusuke Suzuki <ysuzuki>
Status: RESOLVED FIXED    
Severity: Normal CC: ews-watchlist, keith_miller, mark.lam, msaboff, saam, tzagallo, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch
none
Patch
none
Patch
none
Patch
mark.lam: review+, ews-watchlist: commit-queue-
Patch for landing none

Yusuke Suzuki
Reported 2019-07-25 20:55:11 PDT
[JSC] Potential GC fix for JSPropertyEnumerator
Attachments
Patch (5.18 KB, patch)
2019-07-25 20:55 PDT, Yusuke Suzuki
no flags
Patch (10.30 KB, patch)
2019-07-26 00:33 PDT, Yusuke Suzuki
no flags
Patch (16.80 KB, patch)
2019-07-26 17:49 PDT, Yusuke Suzuki
no flags
Patch (16.83 KB, patch)
2019-07-26 17:59 PDT, Yusuke Suzuki
mark.lam: review+
ews-watchlist: commit-queue-
Patch for landing (16.91 KB, patch)
2019-07-26 20:39 PDT, Yusuke Suzuki
no flags
Yusuke Suzuki
Comment 1 2019-07-25 20:55:39 PDT
Yusuke Suzuki
Comment 2 2019-07-26 00:33:19 PDT
Yusuke Suzuki
Comment 3 2019-07-26 01:26:28 PDT
Yusuke Suzuki
Comment 4 2019-07-26 17:49:22 PDT
Yusuke Suzuki
Comment 5 2019-07-26 17:59:47 PDT
Mark Lam
Comment 6 2019-07-26 18:16:45 PDT
Comment on attachment 375006 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=375006&action=review Very nicely done. r=me > Source/JavaScriptCore/ChangeLog:8 > + We are seeing some JSPropertyNameEnumerator::visitChildren crashes for a long time. The crash frequency itself is not high, but it exists so long. I suggest /are seeing/have been seeing/ and /exists so long/has existed for a long time/. > Source/JavaScriptCore/ChangeLog:9 > + The crash happens when visiting m_propertyNames. It is also possible that this crash is caused by random corruption in somewhere, but JSPropertyNameEnumerator /in somewhere/somewhere/. > Source/JavaScriptCore/ChangeLog:13 > + We should use Auxiliary memory for this use case. And we should set this memory at a constructor so that I suggest /at a constructor/in the constructor/. > Source/JavaScriptCore/ChangeLog:20 > + In this patch, we align JSPropertyNameEnumerator implementation to the modern one to avoid using Vector<WriteBarrier<JSString>>. And we can make JSPropertyNameEnumerator > + non-destructible cell. Since JSCell's destructor is one of the cause of various issues, we should avoid it if we can. /make non-destructible cell/make a non-destructible cell/.
EWS Watchlist
Comment 7 2019-07-26 20:18:06 PDT
Comment on attachment 375006 [details] Patch Attachment 375006 [details] did not pass jsc-ews (mac): Output: https://webkit-queues.webkit.org/results/12819333 New failing tests: stress/for-in-stress.js.ftl-eager-no-cjit-b3o1 stress/for-in-stress.js.dfg-eager stress/for-in-stress.js.ftl-no-cjit-validate-sampling-profiler stress/for-in-stress.js.mini-mode stress/for-in-stress.js.ftl-no-cjit-no-put-stack-validate stress/for-in-stress.js.ftl-no-cjit-b3o0 stress/for-in-stress.js.no-cjit-validate-phases stress/for-in-stress.js.ftl-no-cjit-small-pool stress/for-in-stress.js.no-cjit-collect-continuously stress/for-in-stress.js.no-ftl stress/for-in-stress.js.ftl-eager stress/for-in-stress.js.no-llint stress/for-in-stress.js.bytecode-cache stress/for-in-stress.js.ftl-no-cjit-no-inline-validate stress/for-in-stress.js.default stress/for-in-stress.js.dfg-maximal-flush-validate-no-cjit stress/for-in-stress.js.dfg-eager-no-cjit-validate stress/for-in-stress.js.ftl-eager-no-cjit
Yusuke Suzuki
Comment 8 2019-07-26 20:28:11 PDT
(In reply to Build Bot from comment #7) > Comment on attachment 375006 [details] > Patch > > Attachment 375006 [details] did not pass jsc-ews (mac): > Output: https://webkit-queues.webkit.org/results/12819333 > > New failing tests: > stress/for-in-stress.js.ftl-eager-no-cjit-b3o1 > stress/for-in-stress.js.dfg-eager > stress/for-in-stress.js.ftl-no-cjit-validate-sampling-profiler > stress/for-in-stress.js.mini-mode > stress/for-in-stress.js.ftl-no-cjit-no-put-stack-validate > stress/for-in-stress.js.ftl-no-cjit-b3o0 > stress/for-in-stress.js.no-cjit-validate-phases > stress/for-in-stress.js.ftl-no-cjit-small-pool > stress/for-in-stress.js.no-cjit-collect-continuously > stress/for-in-stress.js.no-ftl > stress/for-in-stress.js.ftl-eager > stress/for-in-stress.js.no-llint > stress/for-in-stress.js.bytecode-cache > stress/for-in-stress.js.ftl-no-cjit-no-inline-validate > stress/for-in-stress.js.default > stress/for-in-stress.js.dfg-maximal-flush-validate-no-cjit > stress/for-in-stress.js.dfg-eager-no-cjit-validate > stress/for-in-stress.js.ftl-eager-no-cjit The iteration counter was too large, and timeout in the test harness. I'll decrease the counter to fit it in the timeout threshold.
Yusuke Suzuki
Comment 9 2019-07-26 20:37:32 PDT
Comment on attachment 375006 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=375006&action=review Thanks! >> Source/JavaScriptCore/ChangeLog:8 >> + We are seeing some JSPropertyNameEnumerator::visitChildren crashes for a long time. The crash frequency itself is not high, but it exists so long. > > I suggest /are seeing/have been seeing/ and /exists so long/has existed for a long time/. Fixed. >> Source/JavaScriptCore/ChangeLog:9 >> + The crash happens when visiting m_propertyNames. It is also possible that this crash is caused by random corruption in somewhere, but JSPropertyNameEnumerator > > /in somewhere/somewhere/. Fixed. >> Source/JavaScriptCore/ChangeLog:13 >> + We should use Auxiliary memory for this use case. And we should set this memory at a constructor so that > > I suggest /at a constructor/in the constructor/. Fixed. >> Source/JavaScriptCore/ChangeLog:20 >> + non-destructible cell. Since JSCell's destructor is one of the cause of various issues, we should avoid it if we can. > > /make non-destructible cell/make a non-destructible cell/. Fixed.
Yusuke Suzuki
Comment 10 2019-07-26 20:39:51 PDT
Created attachment 375014 [details] Patch for landing
Yusuke Suzuki
Comment 11 2019-07-26 21:55:15 PDT
Note You need to log in before you can comment on or make changes to this bug.