Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 37e5346e6e2813aebde62407b48f70a81850959c https://github.com/WebKit/WebKit/commit/37e5346e6e2813aebde62407b48f70a81850959c Author: Youenn Fablet <youe...@gmail.com> Date: 2023-05-23 (Tue, 23 May 2023)
Changed paths: M LayoutTests/imported/w3c/web-platform-tests/streams/idlharness.any-expected.txt M LayoutTests/imported/w3c/web-platform-tests/streams/idlharness.any.serviceworker-expected.txt M LayoutTests/imported/w3c/web-platform-tests/streams/idlharness.any.sharedworker-expected.txt M LayoutTests/imported/w3c/web-platform-tests/streams/idlharness.any.worker-expected.txt M Source/WebCore/CMakeLists.txt M Source/WebCore/DerivedSources-input.xcfilelist M Source/WebCore/DerivedSources.make M Source/WebCore/Modules/compression/CompressionStream.js M Source/WebCore/Modules/compression/DecompressionStream.js A Source/WebCore/Modules/streams/TransformStream.cpp A Source/WebCore/Modules/streams/TransformStream.h M Source/WebCore/Modules/streams/TransformStream.idl R Source/WebCore/Modules/streams/TransformStream.js M Source/WebCore/Modules/streams/TransformStreamInternals.js M Source/WebCore/Sources.txt M Source/WebCore/WebCore.xcodeproj/project.pbxproj M Source/WebCore/dom/TextDecoderStream.js M Source/WebCore/dom/TextEncoderStream.js Log Message: ----------- Memory leak in compression stream to blob conversion https://bugs.webkit.org/show_bug.cgi?id=256837 rdar://109409251 Reviewed by Chris Dumez. TransformStream is keeping a reference ot its ReadableStream and its InternalReadableStream. InternalReadableStream is keeping a reference to its TransformStream as part of the algorithms. This triggers a reference cycle that cannot be broken until the stream context is stopped as: - InternalReadableStream is DOMGuarded. - ReadableStream keeps a reference to its InternalReadableStream. To prevent this, we do the same change we did in the past for ReadableStream and WritableStream: - TransformStream becomes a C++ object. - TransformStream keeps a reference to its InternalTransformStream which is a JS object. - To prevent GC, we make sure to let TransformStream mark its InternalTransformStream instead of relying on DOMGuarded. - InternalTransformStream keeps a reference to InternalReadableStream, but not to the corresponding ReadableStream, which ensures therre is no ref cycles. We update transforms tream creation call sites accordingly. Manually tested. Existing tests ensure that streams behavior and related remains the same. * LayoutTests/imported/w3c/web-platform-tests/streams/idlharness.any-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/streams/idlharness.any.serviceworker-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/streams/idlharness.any.sharedworker-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/streams/idlharness.any.worker-expected.txt: * Source/WebCore/CMakeLists.txt: * Source/WebCore/DerivedSources-input.xcfilelist: * Source/WebCore/DerivedSources.make: * Source/WebCore/Modules/compression/CompressionStream.js: (initializeCompressionStream): (getter.readable): (getter.writable): * Source/WebCore/Modules/compression/DecompressionStream.js: (initializeDecompressionStream): (getter.readable): (getter.writable): * Source/WebCore/Modules/streams/TransformStream.cpp: Added. (WebCore::TransformStream::create): (WebCore::TransformStream::TransformStream): (WebCore::TransformStream::~TransformStream): (WebCore::invokeTransformStreamFunction): (WebCore::createInternalTransformStream): (WebCore::JSTransformStream::visitAdditionalChildren): * Source/WebCore/Modules/streams/TransformStream.h: Added. (WebCore::TransformStream::readable): (WebCore::TransformStream::writable): (WebCore::TransformStream::internalTransformStream): * Source/WebCore/Modules/streams/TransformStream.idl: * Source/WebCore/Modules/streams/TransformStream.js: Removed. * Source/WebCore/Modules/streams/TransformStreamInternals.js: (isTransformStream): (createInternalTransformStreamFromTransformer): (createTransformStream): (initializeTransformStream): * Source/WebCore/Sources.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/dom/TextDecoderStream.js: (initializeTextDecoderStream): (getter.readable): (getter.writable): * Source/WebCore/dom/TextEncoderStream.js: (initializeTextEncoderStream): (getter.readable): (getter.writable): Canonical link: https://commits.webkit.org/264462@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes