mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-28 02:27:19 +02:00
LibWeb/Streams: Make ReadRequest GC-allocated
This allows it to keep its edges alive. Fixes an intermittent crash seen by UBSAN on CI. :^)
This commit is contained in:
Notes:
sideshowbarker
2024-07-16 20:12:13 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/9c3e9e8981 Pull-request: https://github.com/SerenityOS/serenity/pull/20459
@@ -20,7 +20,9 @@ struct ReadableStreamReadResult {
|
||||
bool done;
|
||||
};
|
||||
|
||||
class ReadRequest : public RefCounted<ReadRequest> {
|
||||
class ReadRequest : public JS::Cell {
|
||||
JS_CELL(ReadRequest, JS::Cell);
|
||||
|
||||
public:
|
||||
virtual ~ReadRequest() = default;
|
||||
|
||||
@@ -29,7 +31,9 @@ public:
|
||||
virtual void on_error(JS::Value error) = 0;
|
||||
};
|
||||
|
||||
class ReadLoopReadRequest : public ReadRequest {
|
||||
class ReadLoopReadRequest final : public ReadRequest {
|
||||
JS_CELL(ReadLoopReadRequest, JS::Cell);
|
||||
|
||||
public:
|
||||
// successSteps, which is an algorithm accepting a byte sequence
|
||||
using SuccessSteps = JS::SafeFunction<void(ByteBuffer)>;
|
||||
@@ -46,6 +50,8 @@ public:
|
||||
virtual void on_error(JS::Value error) override;
|
||||
|
||||
private:
|
||||
virtual void visit_edges(Visitor&) override;
|
||||
|
||||
JS::VM& m_vm;
|
||||
JS::Realm& m_realm;
|
||||
ReadableStreamDefaultReader& m_reader;
|
||||
@@ -72,7 +78,7 @@ public:
|
||||
|
||||
WebIDL::ExceptionOr<void> release_lock();
|
||||
|
||||
SinglyLinkedList<NonnullRefPtr<ReadRequest>>& read_requests() { return m_read_requests; }
|
||||
SinglyLinkedList<JS::NonnullGCPtr<ReadRequest>>& read_requests() { return m_read_requests; }
|
||||
|
||||
private:
|
||||
explicit ReadableStreamDefaultReader(JS::Realm&);
|
||||
@@ -81,7 +87,7 @@ private:
|
||||
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
|
||||
SinglyLinkedList<NonnullRefPtr<ReadRequest>> m_read_requests;
|
||||
SinglyLinkedList<JS::NonnullGCPtr<ReadRequest>> m_read_requests;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user